C语言文件输入输出函数笔记
发现最近写的程序总是要用到文件操作,所以把C语言与文件输入输出有关的函数复习一下。
C语言是通过将一个文件类型指针与文件关联起来来对文件进行打开、关闭、输入、输出。
文件类型为FILE(实际上是一个结构体)。定义一个文件指针为FILE *fp;就可以将fp和某个文件关联起来进行操作了。例如要打开一个文件:
FILE *fp;
fp=fopen("filename",“打开方式”);//fopen的返回值为NULL或指向文件的指针
或者直接FILE *fp=("filename","打开方式");
如果要重定向只需将指针fp和另一个文件关联。意思是可用一个文件指针操作多个文件。
文件使用完后要及时关闭。这是个好习惯。关闭函数为fclose(fp);这样fp就不在和之前指向的文件关联了。
1.判断文件是否打开成功: www.2cto.com
判断文件是否打开成功可用fopen的返回值if((fp=fopen("filename","r"))==NULL)则打开失败。
2.判断文件是否结束:
判断ASCII文件是否结束fgetc()会返回结束标志EOF(即-1)由于二进制文件数据会出现-1所以必须用函数feof(fp)判断,feof(fp)==1则已结束。
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小;
注意:fread参数buffer指向的空间必须大于或等于要读入的数据块大小。
fread和fwrite一般用于二进制文件的输入输出。用于ASCII文件字符发生转换的情况下可能出现与原设想的情况不同。
5.putw()和getw()用来对磁盘文件读写一个整数。
例如putw(10,fp);//返回值为输出的数字(int)
int i=getw(fp);//失败则返回-1
但注意putw()和getw()都是按二进制输入输出的。
所以如果你用putw()输入数据到文件后以文本的方式打开看到的将都是乱码。
同样如果你在文本文件中输入了数字并保存,用getw()来读入的话读入的结果并不是你想象的那样。因为它是按二进制读的
摘自 shimachao的专栏