文档库 最新最全的文档下载
当前位置:文档库 › C语言文件操作函数大全(超详细)

C语言文件操作函数大全(超详细)

C语言文件操作函数大全(超详细)

作者:

本篇文章是对C语言中的文件操作函数进行了详细的总结分析,需要的朋友参考下

fopen(打开文件)相关函数open,fclose

表头文件#include

定义函数FILE*fopen(const char*path,const char*mode);

函数说明参数path字符串包含欲打开的文件路径及文件名,参数mode字符串则代表着流形态。

mode有下列几种形态字符串:r打开只读文件,该文件必须存在。

r+打开可读写的文件,该文件必须存在。

w打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。

w+打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。

a以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。

a+以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。

r Open text file for reading.The stream is positioned at the beginning of the file.

r+Open for reading and writing.The stream is positioned at the beginning of the file.

w Truncate file to zero length or create text file for writing.The stream is positioned at the beginning of the file.

w+Open for reading and writing.The file is created if it does not exist,otherwise it is truncated. The stream is posi‐

tioned at the beginning of the file.

a Open for appending(writing at end of file).The file is created if it does not exist.The stream is positioned at the

end of the file.

a+Open for reading and appending(writing at end of file).The file is created if it does not exist. The initial file posi‐

tion for reading is at the beginning of the file,but output is always appended to the end of the file.

上述的形态字符串都可以再加一个b字符,如rb、w+b或ab+等组合,加入b字符用来告诉函数库打开的文件为二进制文件,而非纯文字文件。不过在POSIX系统,包含Linux都会忽略该字符。由fopen()所建立的新文件会具有S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH(0666)权限,此文件权限也会参考umask值。返回值文件顺利打开后,指向该流的文件指针就会被返回。若果文件打开失败则返回NULL,并把错误代码存在errno中。

附加说明一般而言,开文件后会作一些文件读取或写入的动作,若开文件失败,接下来的读写动作也无法顺利进行,所以在fopen()后请作错误判断及处理。

范例

#include

main()

{

FILE*fp;

fp=fopen(“noexist”,”a+”);

if(fp==NULL)return;

fclose(fp);

}

1.fprintf功能:传送格式化输出到一个文件中

表头文件:#include

main()

{

FILE*fp;

int fd;

fp=fopen(“/etc/passwd”,”r”);

fd=fileno(fp);

printf(“fd=%d/n”,fd);

fclose(fp);

}

执行fd=3

12.fputc(将一指定字符写入文件流中)相关函数fopen,fwrite,fscanf,putc

表头文件#include

定义函数int fputc(int c,FILE*stream);

函数说明fputc会将参数c转为unsigned char后写入参数stream指定的文件中。返回值fputc()会返回写入成功的字符,即参数c。若返回EOF则代表写入失败。

范例

#include

main()

{

FILE*fp;

char a[26]=”abcdefghijklmnopqrstuvwxyz”;

int i;

fp=fopen(“noexist”,”w”);

for(i=0;i<26;i++)

stream=fopen(“/etc/passwd”,”r”);

fseek(stream,5,SEEK_SET);

printf(“offset=%d/n”,ftell(stream));

rewind(stream);

fgetpos(stream,&pos);

printf(“offset=%d/n”,pos);

pos=10;

fsetpos(stream,&pos);

printf(“offset=%d/n”,ftell(stream));

fclose(stream);

}

执行offset=5

offset=0

offset=10

16.ftell(取得文件流的读取位置)相关函数fseek,rewind,fgetpos,fsetpos

表头文件#include

定义函数long ftell(FILE*stream);

函数说明ftell()用来取得文件流目前的读写位置。参数stream为已打开的文件指针。

返回值当调用成功时则返回目前的读写位置,若有错误则返回-1,errno会存放错误代码。错误代码EBADF参数stream无效或可移动读写位置的文件流。

范例参考fseek()。

17.fwrite(将数据写至文件流)相关函数fopen,fread,fseek,fscanf

表头文件#include

定义函数size_t fwrite(const void*ptr,size_t size,size_t nmemb,FILE*stream);

函数说明fwrite()用来将数据写入文件流中。参数stream为已打开的文件指针,参数ptr指向欲写入的数据地址,总共写入的字符数以参数size*nmemb来决定。Fwrite()会返回实际写入的nmemb数目。

返回值返回实际写入的nmemb数目。

范例

#include

#define set_s(x,y){strcoy(s[x].name,y);s[x].size=strlen(y);}

#define nmemb3

struct test

{

char name[20];

int size;

}s[nmemb];

main()

{

FILE*stream;

set_s(0,”Linux!”);

set_s(1,”FreeBSD!”);

set_s(2,”Windows2000.”);

stream=fopen(“/tmp/fwrite”,”w”);

fwrite(s,sizeof(struct test),nmemb,stream);

fclose(stream);

}

执行参考fread()。

main()

{

char template[]=”template-XXXXXX”;

mktemp(template);

printf(“template=%s/n”,template);

}

22.putc(将一指定字符写入文件中)相关函数fopen,fwrite,fscanf,fputc

表头文件#include

定义函数int putc(int c,FILE*stream);

函数说明putc()会将参数c转为unsigned char后写入参数stream指定的文件中。虽然putc()与fputc()作用相同,但putc()为宏定义,非真正的函数调用。

返回值putc()会返回写入成功的字符,即参数c。若返回EOF则代表写入失败。

范例参考fputc()。

23.putchar(将指定的字符写到标准输出设备)相关函数fopen,fwrite,fscanf,fputc

表头文件#include

定义函数int putchar(int c);

函数说明putchar()用来将参数c字符写到标准输出设备。

返回值putchar()会返回输出成功的字符,即参数c。若返回EOF则代表输出失败。

附加说明putchar()非真正函数,而是putc(c,stdout)宏定义。

范例参考getchar()。

24.rewind(重设文件流的读写位置为文件开头)相关函数fseek,ftell,fgetpos,fsetpos

表头文件#include

定义函数void rewind(FILE*stream);

函数说明rewind()用来把文件流的读写位置移至文件开头。参数stream为已打开的文件指针。此函数相当于调用fseek(stream,0,SEEK_SET)。

返回值

范例参考fseek()

25.setbuf(设置文件流的缓冲区)相关函数setbuffer,setlinebuf,setvbuf

表头文件#include

定义函数void setbuf(FILE*stream,char*buf);

函数说明在打开文件流后,读取内容之前,调用setbuf()可以用来设置文件流的缓冲区。参数stream为指定的文件流,参数buf指向自定的缓冲区起始地址。如果参数buf为NULL指针,则为无缓冲IO。Setbuf()相当于调用:setvbuf(stream,buf,buf?_IOFBF:_IONBF,BUFSIZ)

返回值

26.setbuffer(设置文件流的缓冲区)相关函数setlinebuf,setbuf,setvbuf

表头文件#include

定义函数void setbuffer(FILE*stream,char*buf,size_t size);

函数说明在打开文件流后,读取内容之前,调用setbuffer()可用来设置文件流的缓冲区。参数stream为指定的文件流,参数buf指向自定的缓冲区起始地址,参数size为缓冲区大小。

返回值

27.setlinebuf(设置文件流为线性缓冲区)相关函数setbuffer,setbuf,setvbuf

表头文件#include

定义函数void setlinebuf(FILE*stream);

函数说明setlinebuf()用来设置文件流以换行为依据的无缓冲IO。相当于调用:setvbuf(stream,(char *)NULL,_IOLBF,0);请参考setvbuf()。

返回值

28.setvbuf(设置文件流的缓冲区)相关函数setbuffer,setlinebuf,setbuf

表头文件#include

定义函数int setvbuf(FILE*stream,char*buf,int mode,size_t size);

函数说明在打开文件流后,读取内容之前,调用setvbuf()可以用来设置文件流的缓冲区。参数stream为指定的文件流,参数buf指向自定的缓冲区起始地址,参数size为缓冲区大小,参数mode有下列几种

_IONBF无缓冲IO

_IOLBF以换行为依据的无缓冲IO

_IOFBF完全无缓冲IO。如果参数buf为NULL指针,则为无缓冲IO。

返回值

29.ungetc(将指定字符写回文件流中)相关函数fputc,getchar,getc

表头文件#include

定义函数int ungetc(int c,FILE*stream);

函数说明ungetc()将参数c字符写回参数stream所指定的文件流。这个写回的字符会由下一个读取文件流的函数取得。

返回值成功则返回c字符,若有错误则返回EOF。

#include

#include

int main()

{

FILE*fp=NULL;

char*str;

char re;

int num=10;

str=(char*)malloc(100);

//snprintf(str,10,"test:%s","0123456789012345678");

//printf("str=%s\n",str);

fp=fopen("/local/test.c","a+");

if(fp==NULL){

printf("Fail to open file\n");

}

//fseek(fp,-1,SEEK_END);

num=ftell(fp);

printf("test file long:%d\n",num);

fscanf(fp,"%s",str);

printf("str=%s\n",str);

printf("test a:%s\n",str);

while((re=getc(fp))!=EOF){//getc可以用作fgetc用printf("%c",re);

}

//fread(str,10,10,fp);

fgets(str,100,fp);

printf("test a:%s\n",str);

sprintf(str,"xiewei test is:%s","ABCDEFGHIGKMNI");

printf("str2=%s\n",str);

//fprintf(fp,"%s\n",str);

fwrite(str,2,10,fp);

num=ftell(fp);

if(str!=NULL){

free(str);

}

fclose(fp);

return0;

}

相关文档