分享

第二十三讲 再说文件的操作

 昵称29398856 2016-01-21

       昨天我们说了文件的读取和写入,不过我们只说了一对函数,关于文本文件的操作的函数很多,我本来不打算多说的,不过想了写,既然都把fgets和fputs都说了,如果不说fscanf和fprintf的话是不是有点过分了呢?于是心想,今天就用一讲的课程来说说这两个函数。

      printf和scanf我们一开始就接触了,对于这两个函数再熟悉不过,不过我想告诉大家,这两个函数的变形有很多种,sprintf,sscanf等等都是他们的变形,这两个函数是他们的高级用法,通常都没有多少人去使用,因为有很多种方式可以替代他们,所以如果不是想彰显个人的编程水平的话,我想没人会去使用它们,甚至发觉很多几年工作经验的人竟然都不知道sscanf这个函数,可见他的用处不多。

      现在我们要说的fprintf和fscanf,所以关于其他的我就懒得说,我给出了函数了,大家若有兴趣可以自己去谷歌一下。

       和fgets和fputs一样,fprintf和fscanf同样需要FILE的指针作为参数,所以我们还是用一个例子来说明这个问题比较适合:

------------------------------

#include
#include

int main()
{
       FILE *file1,*file2;
       char ch[1000],name1[20],name2[20];
       fprintf(stdout,'请输入需要读取的文件名:\n');
       fscanf(stdin,'%s',name1);
       fprintf(stdout,'请输入需要写入的文件名:\n');
       fscanf(stdin,'%s',name2);
       file1 = fopen(name1,'r');
       file2 = fopen(name2,'w');
       if(file1 == NULL)
              fprintf(stdout,'打开文件失败!');
       if(file2 == NULL)
              fprintf(stdout,'创建文件失败!');
        while(fscanf(file1,'%s',ch) == 1)
        {
              fprintf(stdout,'%s',ch);
              fprintf(file2,'%s',ch);
         }
        fclose(file1);
        fclose(file2);
        system('PAUSE');
        return 0;
}

-------------------------------------

       这个例子,我们可以在标准输出框中看到了文本框的所有内容,但同时我们也发现一个问题,这些内容是密密麻麻的打印出来的,我们再回去看看我们要写入的文件看看,发现里面的内容和我们在标准输出框中的内容一样。

       这真是一个棘手的问题啊,不过也不足为奇,还记得我们在开始的时候用scanf读取“hello world”的时候,他只读取了一个hello,所以当时我们为了解决这个问题,于是引进了gets。

       通过昨天和今天的对比,我想大家对这两对I/O函数都有所了解了,所以该使用什么大家已经心里有数。

       现在我们来说说一下打开文件的模式,也就是来说说fopen这个函数,想要了解一个函数,我们就得先知道他的原型,下面是我们从MSDN上面查到的原型:

---------------------------

FILE *fopen( 
  const char *filename,
  const char *mode );

-----------------------------

     这个原型很清楚,他的第一个参数就是我们要打开或者是创建的文件名,第二个参数是打开模式,打开模式我们可以有下面几种类型。

--------------------------------------

'r'    打开一个文本文件, 只读模式。

'w'    打开一个文本文件,只写模式,并且先将文件的长度截为零。如果该文件不存在则先创建文件。

'a'    打开一个文本文件,可以写入文件,向已有文件的发问追加内容,如果该文件不存在则先创建文件。

'r+'   打开一个文本文件, 可以进行更新,即可以读取和写入文件。

'w+'   打开一个文本文件, 可以进行更新 (读取和写入), 如果该文件存在则首先将其长度截为零, 如果不在则先创建文件。

'a+'   打开一个文本文件,可以进行更新 (读取和写入), 向已有文件的尾部追加内容,如果该文件不存在则先创建之; 可以读取整个文件, 但写入时只能追加内容。

---------------------------------------

       大家可能还会遇到像下面的这种模式:

----------------------------------------

 'rb' 'wb' 'ab' 'ab+' 'a+b' 'wb+' 'w+b' 'ab+' 'a+b'

-----------------------------------------

       这是以二进制的方式操作文件,b既是表示二进制,意义和上面一样。

      今天的内容就说到这里,明天情人节,就不推送了,下礼拜我们把文本文件的最后一点知识点说了也就算是结束文本文件的操作了。

        大家都懂的,周末不推送,明天虽然不是周末,但是是情人节,所以要陪陪老婆和孩子。

===================

回复D&d直接查看目录  

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多