c语言中程序文件,c语言中的文件处理

在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]);

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值