C语言文件输入输出函数笔记

来源:互联网 发布:c语言sigtrap 编辑:程序博客网 时间:2024/05/20 06:25

        发现最近写的程序总是要用到文件操作,所以把C语言与文件输入输出有关的函数复习一下。

 

   C语言是通过将一个文件类型指针与文件关联起来来对文件进行打开、关闭、输入、输出。

文件类型为FILE(实际上是一个结构体)。定义一个文件指针为FILE *fp;就可以将fp和某个文件关联起来进行操作了。例如要打开一个文件:

                                                FILE *fp;

                                                            fp=fopen("filename",“打开方式”);//fopen的返回值为NULL或指向文件的指针

                                          或者直接FILE *fp=("filename","打开方式");

如果要重定向只需将指针fp和另一个文件关联。意思是可用一个文件指针操作多个文件。

文件使用完后要及时关闭。这是个好习惯。关闭函数为fclose(fp);这样fp就不在和之前指向的文件关联了。

 

1.判断文件是否打开成功:

    判断文件是否打开成功可用fopen的返回值if((fp=fopen("filename","r"))==NULL)则打开失败。

 

2.判断文件是否结束:

判断ASCII文件是否结束fgetc()会返回结束标志EOF(即-1)由于二进制文件数据会出现-1所以必须用函数feof(fp)判断,feof(fp)==1则已结束。所以读入一个文件可以while(!feof(fp)){c=fgetc(in); ...}

 

3.单个字符的输入输出:fgetc()和fputc()
ch=fgetc(fp);fp为文件指针,且fgetc()不会忽略空格和回车符,只能用于读入字符。
相应的fputc(ch,fp);向文件输出字符时也不会忽略空格,回车符
因为fgetc()返回字符所以fgetc()和fputc()通常嵌套使用:fputc(fgetc(in),out)。

 

fputc()的返回值为输入的字符或EOF(-1)(失败的情况下)

fgetc()的返回值为读入的字符(包括文件结束标志EOF(-1))

 

4.数据块的输入输出:fread(buff,size,count,fp)和发fwrite(buffer,size,count,fp)
buffer是一个指针,对于fread,它是读入数据的存放地址,对于发fwrite它是要输出数据的地址,
size是指要读写的字节数,count是要进行读写多少个size字节的数据项。

 

如果成功,fread和fwrite都返回成功输入和读取的数据块个数有可能比count小;不是返回size。

 

注意:fread参数buffer指向的空间必须大于或等于要读入的数据块大小。

         fread和fwrite一般用于二进制文件的输入输出。用于ASCII文件字符发生转换的情况下可能出现与原设想的情况不同。

 

5.putw()和getw()用来对磁盘文件读写一个整数。

例如putw(10,fp);//返回值为输出的数字(int)

int i=getw(fp);//失败则返回-1

但注意putw()和getw()都是按二进制输入输出的。

所以如果你用putw()输入数据到文件后以文本的方式打开看到的将都是乱码。

同样如果你在文本文件中输入了数字并保存,用getw()来读入的话读入的结果并不是你想象的那样。因为它是按二进制读的。

另外putw()和getw()不是标准库函数。

 

6.格式化输入输出fscanf()和fprintf();

这两个函数和标准输入输出scanf()和printf()类似,没啥好说的。

fscanf(文件指针,格式化字符串,输入序列);

fprintf(文件指针,格式化字符串,输出序列);

注意:fscanf()和fprintf()只针对ASSCII文件,如果用他们处理用二进制格式打开的文件,它们还是按照ASSCII方式工作。要处理二进制文件可以用fread()和fwrite().

 

7.字符串输入输出fgets()和fputs()

fgets(),fputs()和gets(),puts()类似

不过fgets()有三个参数fgets(str,n,fp)

str为用来保存读入内容的字符数组或char*指针。n为要读入字符的个数。fp为文件指针。

n:只从文件读入n-1个字符,然后在最后加上'\0',因此得到的字符串有n个字符。但是如果在读入n-1个字符前遇到了换行符或EOF读入结束,换行符也读入。

fgets(str,n,fp)返回str的首地址。

fputs(str,fp)同puts,str为字符数组名或char指针。

fputs()成功后返回0,否则返回EOF。

 

原创粉丝点击