Posted on 2009-01-05 19:03
Thinkfeng 阅读(2203)
评论(0) 编辑 收藏 引用
C/C++读写文件小结
因为工作需要,最近到处摘抄C/C++关于读写文件的例子,这里留个小结,以备后用。
读文件的流程是大致是如此的:
建立一个操作文件的指针 *fd => 用某种方式(读/写/读写/追加等等)打开文件 => 对文件做相应的操作。
示例文件名为readtxt.txt,同程序置于相同目录下。文件内容为:
hello,world
my name is rf0007
纯C的读文本文件
定义一个文件指针
FILE *fd;
用fopen打开一个文本文件,fopen的第一个参数为文件路和文件名,第二个参数定义的是打开文件的方式,这些参数实在是记不住,具体的如下:
参数
| 全写
| 意义
|
r
| read
| 读
|
w
| write
| 写
|
a
| append
| 追加
|
t
| text
| 文本文件,可省略
|
b
| binary
| 二进制文件 |
rt
| 只读,文本文件
|
wt
| 只写或建立,文本文件
|
at
| 在文件末尾追加,文本文件
|
rb
| 只读,二进制文件
|
wb
| 只写或建立,二进制文件
|
ab
| 在文件末尾追加,二进制文件
|
rt+
| 可读可写,文本文件
|
wt+
| 可读可写或建立,文本文件
|
at+
| 可读可写,在文件的末尾追加,文本文件
|
rb+
| 可读可写,二进制文件
|
wb+
| 可读可写或建立,二进制文件
|
ab+
| 可读可写,在文件的末尾追加,二进制文件 |
fd = fopen("txtfile.txt","r");
执行完fopen后,需要判断一下,此文件是否确实被打开了。
if(NULL == fd)printf("文件未被打开");
接下来就可以进行文件的操作了。
读文件的函数有好几个,fread,fscanf,fgets。它们之间是有区别的:
fread是以块的方式来读取数据,按照指定的长度和指定的次数来读,读完后的数据是按照地址的方式来存储的,所以,比较适合用它来读二进制数,因为程序员比较清楚的知道自己要读多少的数据。
fgets是以串的方式来读取数据,从数据文件中读取不超过N-1个字符的数,读入的数据在最后一个字符后会加上一个截止符'\n',如果中间出现了回车,就会截止了。所以可以用fgets来读入一行的文本数据,应该是相当好用的。
fscanf与fgets类似,不过它是按照格式来读的,跟scanf一样。比如说,指定一个%d,那么它就读入一个整型的值;如果指定一个%s,那么它遇到一个空格也会停止的。
以下是一个实际的代码,用三种方式来完成文件的读取。
#include <stdio.h>
int main()
{
FILE *fd;
char buf[64];
fd = fopen("txtfile.txt","rb");
if(NULL == fd)
{
printf("read file error!");
return 0;
}
printf("read file success!\n");
while(!feof(fd))
{
/*method 1
fgets(buf,64,fd);
printf("%s\n",buf);
*/
/*method 2
fread(buf,64,1,fd);
printf("the %dth time: %s \n ",count,buf);
*/
fscanf(fd,"%s",buf);
printf("%s\n",buf);
}
fclose(fd);
return 1;
}