在C语言中,文件的操作是通过FILE结构体进行了,具体实现时,先利用fopen返回一个指向FILE结构体的指针:
FILE *fopen( const char *filename, const char *mode );
filename:文件名,mode:打开的模式,规定了是可读、可写、追加之类的属性。
"r":可读,如果文件不存在,fopen调用失败
"w":可写,如果文件存在,那么原来的内容会被销毁。
"a":在文件尾追加,在新的数据写到文件里之前,不改变EOF标记,如果文件不存在,创建一个新的文件。
"r+":可读可写,文件必须存在。
"w+":打开一个空文件用来读写,如果文件存在,则内容被销毁。
"a+":可读可追加,在新的数据写到文件里之前,改变EOF标记;如果文件不存在,创建一个新的文件。
如果调用失败,返回一个空指针。
size_t fwrite( const void *buffer, size_t size, size_t count, FILE *stream );
buffer:写入文件的内容;size:每一项的大小;count:写入了多少项;stream:指向文件的指针。返回值为写入的总的字节数。
读取文件使用的是fread函数: size_t fread( void *buffer, size_t size, size_t count, FILE *stream ); buffer指明了读取的文件储存在哪里,size表明每个项的大小,count表明了读多少项,stream是指向FILE类型的指针。返回值为实际读取的字节数。 当然,在你读取文件之前,最好确保文件指针指向的是文件的头部,通过rewind函数来让指针复位: void rewind( FILE *stream ); stream:指向文件的指针
下面看一个例子:
要求:有两个文件fei.txt和san.txt。对着两个文件进行简单的处理,然后将两个文件中的数据交叉合并。
#include
#include
void main()
{
FILE *fei,*san;//原始数据
FILE*feiout,*sanout;//处理后的数据
FILE *out;//用处理过后的数据进行整合为out
int i=0,j=0,k=0,B[10000]={0};
fei=fopen("d:\\fei.txt","r+");//打开fei
san=fopen("d:\\san.txt","r+");//打开san
feiout=fopen("d:\\feiout.txt","w+");
sanout=fopen("d:\\sanout.txt","w+");
out=fopen("d:\\out.txt","w+");
if((fei==NULL) || (san==NULL))
printf("fei或san文件不存在");
//对fei进行操作,删除掉多余的空格和回车,换行
int flag=0;
char ch2=fgetc(fei);
while(ch2!=EOF)
{
if(ch2==' ' || ch2=='\n' || ch2=='\r')
{
++flag;
if(flag==1) fputc(' ',feiout);
}
else
{
flag=0;
fputc(ch2,feiout);
}
ch2=fgetc(fei);
}
//对san进行处理,将;号修改为空格
char ch1=fgetc(san);
while(ch1!=EOF)
{
i++;
if(ch1!=';') fputc(ch1,sanout);
else fputc(' ',sanout);
ch1=fgetc(san);
}
//将feiout和sanout指针清零
rewind(feiout); rewind(sanout);
//判断feiout中数据的长度
while(!feof(feiout))
{
fscanf(feiout,"%d",&B[k++]);
}
rewind(feiout);
printf("%d\n",k);
//将数据存放在数组B中
for(i=0;i
{
fscanf(feiout,"%d",&B[j++]);
fscanf(sanout,"%d",&B[j++]);
fscanf(sanout,"%d",&B[j++]);
}
//将B中的数据存放在out文件中
for(i=0;i
fprintf(out,"%d ",B[i]);
}