Thinkfeng的C++

Thinkfeng的C++
posts - 2, comments - 0, trackbacks - 0, articles - 8
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

C/C++读写文件小结

Posted on 2009-01-05 19:03 Thinkfeng 阅读(2210) 评论(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;
}


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理