C语⾔⽂件操作函数⼤全(超详细)
相关函数 open,fclose
表头⽂件 #include<stdio.h>
定义函数 FILE * fopen(const char * path,const char * mode);
函数说明参数path字符串包含欲打开的⽂件路径及⽂件名,参数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<stdio.h>
main()
{
FILE * fp;
fp=fopen(“noexist”,”a+”);
if(fp= =NULL) return;
fclose(fp);
}
功能:传送格式化输出到⼀个⽂件中
表头⽂件:#include<stdio.h>
函数原型:int fprintf(FILE *stream, char *format[, argument,...]);
FILE* ⼀个FILE型的指针
char* 格式化输⼊函数,和printf⾥的格式⼀样
返回值:成功时返回转换的字节数,失败时返回⼀个负数
fp = fopen("/local/test.c","a+");
fprintf(fp,"%s\n",str);
功能:从⼀个流中执⾏格式化输⼊
表头⽂件:#include<stdio.h>
函数原型:int fscanf(FILE *stream, char *format[,]);
FILE* ⼀个FILE型的指针
char* 格式化输出函数,和scanf⾥的格式⼀样
返回值:成功时返回转换的字节数,失败时返回⼀个负数
fp = fopen("/local/test.c","a+");
fscanf(fp,"%s",str);
相关函数 feof
表头⽂件 #include<stdio.h>
定义函数 void clearerr(FILE * stream);
函数说明 clearerr()清除参数stream指定的⽂件流所使⽤的错误旗标。
返回值
相关函数 close,fflush,fopen,setbuf
表头⽂件 #include<stdio.h>
定义函数 int fclose(FILE * stream);
函数说明 fclose()⽤来关闭先前fopen()打开的⽂件。此动作会让缓冲区内的数据写⼊⽂件中,并释放系统所提供的⽂件资源。返回值若关⽂件动作成功则返回0,有错误发⽣时则返回EOF并把错误代码存到errno。
错误代码 EBADF表⽰参数stream⾮已打开的⽂件。
范例请参考fopen()。
相关函数 fopen,open,fclose
表头⽂件 #include<stdio.h>
定义函数 FILE * fdopen(int fildes,const char * mode);
函数说明 fdopen()会将参数fildes 的⽂件描述词,转换为对应的⽂件指针后返回。参数mode 字符串则代表着⽂件指针的流形态,此形态必须和原先⽂件描述词读写模式相同。关于mode 字符串格式请参考fopen()。
返回值转换成功时返回指向该流的⽂件指针。失败则返回NULL,并把错误代码存在errno中。
复制代码代码如下:
#include<stdio.h>
main()
{
FILE * fp =fdopen(0,”w+”);
fprintf(fp,”%s/n”,”hello!”);
fclose(fp);
}
执⾏ hello!
相关函数 fopen,fgetc,fgets,fread
表头⽂件 #include<stdio.h>
定义函数 int feof(FILE * stream);
函数说明 feof()⽤来侦测是否读取到了⽂件尾,尾数stream为fopen()所返回之⽂件指针。如果已到⽂件尾则返回⾮零值,其他情况返回0。
返回值返回⾮零值代表已到达⽂件尾。
相关函数 write,fopen,fclose,setbuf
表头⽂件 #include<stdio.h>
定义函数 int fflush(FILE* stream);
函数说明 fflush()会强迫将缓冲区内的数据写回参数stream指定的⽂件中。如果参数stream为NULL,fflush()会将所有打开的⽂件数据更新。
返回值成功返回0,失败返回EOF,错误代码存于errno中。
错误代码 EBADF 参数stream 指定的⽂件未被打开,或打开状态为只读。其它错误代码参考write()。
相关函数 open,fread,fscanf,getc
表头⽂件 include<stdio.h>
定义函数 nt fgetc(FILE * stream);
函数说明 fgetc()从参数stream所指的⽂件中读取⼀个字符。若读到⽂件尾⽽⽆数据时便返回EOF。
返回值 getc()会返回读取到的字符,若返回EOF则表⽰到了⽂件尾。
复制代码代码如下:
#include<stdio.h>
main()
{
FILE *fp;
int c;
fp=fopen(“exist”,”r”);
while((c=fgetc(fp))!=EOF)
printf(“%c”,c);
fclose(fp);
}
相关函数 open,fread,fscanf,getc
表头⽂件 include<stdio.h>
定义函数 har * fgets(char * s,int size,FILE * stream);
函数说明 fgets()⽤来从参数stream所指的⽂件内读⼊字符并存到参数s所指的内存空间,直到出现换⾏字符、读到⽂件尾或是已读了size-1个字符为⽌,最后会加上NULL作为字符串结束。
返回值 gets()若成功则返回s指针,返回NULL则表⽰有错误发⽣。
复制代码代码如下:
#include<stdio.h>
main()
{
char s[80];
fputs(fgets(s,80,stdin),stdout);
}
执⾏ this is a test /*输⼊*/
this is a test /*输出*/
相关函数 open,fopen
表头⽂件 #include<stdio.h>
定义函数 int fileno(FILE * stream);
函数说明 fileno()⽤来取得参数stream指定的⽂件流所使⽤的⽂件描述词。
返回值返回⽂件描述词。
复制代码代码如下:
#include<stdio.h>
main()
{
FILE * fp;
int fd;
fp=fopen(“/etc/passwd”,”r”);
fd=fileno(fp);
printf(“fd=%d/n”,fd);
fclose(fp);
}
执⾏ fd=3
相关函数 fopen,fwrite,fscanf,putc
表头⽂件 #include<stdio.h>
定义函数 int fputc(int c,FILE * stream);
函数说明 fputc 会将参数c 转为unsigned char 后写⼊参数stream 指定的⽂件中。
返回值 fputc()会返回写⼊成功的字符,即参数c。若返回EOF则代表写⼊失败。
复制代码代码如下:
#include<stdio.h>
main()
{
FILE * fp;
char a[26]=”abcdefghijklmnopqrstuvwxyz”;
int i;
fgets和fgetc的区别fp= fopen(“noexist”,”w”);
for(i=0;i<26;i++)
fputc(a,fp);
fclose(fp);
}
相关函数 fopen,fwrite,fscanf,fputc,putc
表头⽂件 #include<stdio.h>
定义函数 int fputs(const char * s,FILE * stream);
函数说明 fputs()⽤来将参数s所指的字符串写⼊到参数stream所指的⽂件内。
返回值若成功则返回写出的字符个数,返回EOF则表⽰有错误发⽣。
fread(从⽂件流读取数据)
相关函数 fopen,fwrite,fseek,fscanf
表头⽂件 #include<stdio.h>
定义函数 size_t fread(void * ptr,size_t size,size_t nmemb,FILE * stream);
函数说明 fread()⽤来从⽂件流中读取数据。参数stream为已打开的⽂件指针,参数ptr 指向欲存放读取进来的数据空间,读取的字符数以参数size*nmemb来决定。Fread()会返回实际读取到的nmemb数⽬,如果此值⽐参数nmemb 来得⼩,则代表可能读到了⽂件尾或有错误发⽣,这时必须⽤feof()或ferror()来决定发⽣什么情况。
返回值返回实际读取到的nmemb数⽬。
复制代码代码如下:
#include<stdio.h>
#define nmemb 3
struct test
{
char name[20];
int size;
}s[nmemb];
int main(){
FILE * stream;
int i;
stream = fopen(“/tmp/fwrite”,”r”);
fread(s,sizeof(struct test),nmemb,stream);
fclose(stream);
for(i=0;i<nmemb;i++)
printf(“name[%d]=%-20s:size[%d]=%d/n”,i,s.name,i,s.size);
}
执⾏
name[0]=Linux! size[0]=6
name[1]=FreeBSD! size[1]=8
name[2]=Windows2000 size[2]=11
相关函数 fopen,fclose
表头⽂件 #include<stdio.h>
定义函数 FILE * freopen(const char * path,const char * mode,FILE * stream);
函数说明参数path字符串包含欲打开的⽂件路径及⽂件名,参数mode请参考fopen()说明。参数stream为已打开的⽂件指针。Freopen()会将原stream所打开的⽂件流关闭,然后打开参数path的⽂件。
返回值⽂件顺利打开后,指向该流的⽂件指针就会被返回。如果⽂件打开失败则返回NULL,并把错误代码存在errno 中。
复制代码代码如下:
#include<stdio.h>
main()
{
FILE * fp;
fp=fopen(“/etc/passwd”,”r”);
fp=freopen(“/etc/group”,”r”,fp);
fclose(fp);
}
相关函数 rewind,ftell,fgetpos,fsetpos,lseek
表头⽂件 #include<stdio.h>
定义函数 int fseek(FILE * stream,long offset,int whence);
函数说明 fseek()⽤来移动⽂件流的读写位置。参数stream为已打开的⽂件指针,参数offset为根据参数whence来移动读写位置的位移数。
参数 whence为下列其中⼀种:
SEEK_SET从距⽂件开头offset位移量为新的读写位置。SEEK_CUR 以⽬前的读写位置往后增加offset个位移量。
SEEK_END将读写位置指向⽂件尾后再增加offset个位移量。
当whence值为SEEK_CUR 或SEEK_END时,参数offset允许负值的出现。
1) 欲将读写位置移动到⽂件开头时:fseek(FILE *stream,0,SEEK_SET);
2) 欲将读写位置移动到⽂件尾时:fseek(FILE *stream,0,0SEEK_END);
返回值当调⽤成功时则返回0,若有错误则返回-1,errno会存放错误代码。
附加说明 fseek()不像lseek()会返回读写位置,因此必须使⽤ftell()来取得⽬前读写的位置。
复制代码代码如下:
#include<stdio.h>
main()
{
FILE * stream;
long offset;
fpos_t pos;
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
相关函数 fseek,rewind,fgetpos,fsetpos
表头⽂件 #include<stdio.h>
定义函数 long ftell(FILE * stream);
函数说明 ftell()⽤来取得⽂件流⽬前的读写位置。参数stream为已打开的⽂件指针。
返回值当调⽤成功时则返回⽬前的读写位置,若有错误则返回-1,errno会存放错误代码。
错误代码 EBADF 参数stream⽆效或可移动读写位置的⽂件流。
相关函数 fopen,fread,fseek,fscanf
表头⽂件 #include<stdio.h>
定义函数 size_t fwrite(const void * ptr,size_t size,size_t nmemb,FILE * stream);
函数说明 fwrite()⽤来将数据写⼊⽂件流中。参数stream为已打开的⽂件指针,参数ptr 指向欲写⼊的数据地址,总共写⼊的字符数以参数size*nmemb来决定。Fwrite()会返回实际写⼊的nmemb数⽬。
返回值返回实际写⼊的nmemb数⽬。
复制代码代码如下:
#include<stdio.h>
#define set_s (x,y) {strcoy(s[x].name,y);s[x].size=strlen(y);}
#define nmemb 3
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);
}
相关函数 read,fopen,fread,fgetc
表头⽂件 #include<stdio.h>
定义函数 int getc(FILE * stream);
函数说明 getc()⽤来从参数stream所指的⽂件中读取⼀个字符。若读到⽂件尾⽽⽆数据时便返回EOF。虽然getc()与fgetc()作⽤相同,但getc()为宏定义,⾮真正的函数调⽤。
返回值 getc()会返回读取到的字符,若返回EOF则表⽰到了⽂件尾。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论