這段時間整理C語言的檔案操作函數費了老大勁,太久沒接觸C語言,一開始寫起來很不順心,終於算是整理了一部分函數出來,可以告一段落了.
但是還有一點BUG,在對檔案進行寫入操作時,對於寫入資料的長度如果大於寫入字串本身長度的話,這時候該檔案的內容會多出一些莫名其妙的資料,希望遇到過此類問題的朋友告訴我原因.感激不盡!
以下是源碼樣本:
#include <stdio.h>
#include <stdlib.h>
//**************函式宣告 *******************
int f_read(char *,long ,char * ,int);
/*
功能:讀檔案
參數:
char *filename 要讀的檔案地址
long pos 記錄在檔案中的位移
char *sdata 儲存所讀資料地址
int len 要讀取的資料長度
傳回值:
讀成功 0
其他錯誤 1
*/
int f_exist(char *);
/*
功能:判斷檔案是否存在
參數:
char *filename 要判斷的檔案名稱
傳回值:
存在 0
不存在 1
*/
int f_write(char *,int ,long ,char *,int );
/*
功能:寫檔案
參數:
char *filename 要進行寫操作的檔案名稱
int mode 寫入模式
1 追加
0 改寫
long pos 記錄在檔案中的位移,對模式 1 無效
char *sdata 儲存所讀資料地址
int len 寫入的資料長度
傳回值:
寫成功 0
其他錯誤 1
*/
//*******************函數定義 ***************
//入口函數
int main(int argc, char *argv[])
{
//step1: 判斷檔案是否存在 ? 0:存在 ; 1:不存在
int rel1=f_exist("ww.txt");
printf("file exist ? : %d/n",rel1);
char data[255]={' '}; //初始化字串數組為空白
//step2: 讀取檔案
f_read("ww.txt",0,data,255);
printf("read file : %s/n",data);
//step3: 寫入檔案
f_write("ww.txt",0,0,"This is a test file.",strlen("This is a test file."));
printf("after writing .../n");
//step4: 讀取檔案
f_read("ww.txt",0,data,255);
printf("read file : %s/n",data);
system("PAUSE");
return 0;
}
//寫檔案
int f_write(char *filename,int mode,long pos,char *sdata,int len)
{
FILE * fp ;
int i=0;
if(mode==0)
{
fp = fopen(filename, "wt");
while (i<len+pos)
{
if(i>=pos)
fputc(*sdata++,fp);
else
fputc(' ',fp);
i++;
}
}
else if(mode==1)
{
fp = fopen(filename, "at");
while (i<len)
{
fputc(*sdata++,fp);
i++;
}
}
else
{
return 1;
}
fclose(fp);
return 0;
}
//判斷檔案是否存在
int f_exist(char *filename)
{
FILE * fp = fopen(filename, "rb");
if (fp==NULL)
{
return 1;
}
else
{
fclose(fp);
return 0;
}
}
//讀檔案
int f_read(char *filename,long pos,char *sdata,int len)
{
FILE * fp = fopen(filename, "rt");
if(fp==NULL)
{
return 1;
}
char ch=fgetc(fp);
if(ch==EOF)
{
return 1;
}
int i=0;
while (i<len+pos)
{
if(i>=pos)
*sdata++=ch;
ch=fgetc(fp);
i++;
}
fclose(fp);
return 0;
}