首页 百科知识 再说文件的操作

再说文件的操作

时间:2022-09-15 百科知识 版权反馈
【摘要】:上一讲我们说了文件的读取和写入,不过我们只说了一对函数,关于文本文件的操作的函数很多,我本来不打算多说的,不过想了写,既然都把fgets和fputs都说了,如果不说fscanf和fprintf的话是不是有点过分了呢?"); if fprintf(stdout,"创建文件失败!"a+" 打开一个文本文件,可以进行更新 , 向已有文件的尾部追加内容,如果该文件不存在则先创建之; 可以读取整个文件, 但写入时只能追加内容。

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

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

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

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

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

#include <stdio.h>
#include <stdlib.h>

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上面查到的原型:

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

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

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

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

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

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

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

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

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

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

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

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

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

 "rb" "wb" "ab" "ab+" "a+b" "wb+" "w+b" "ab+" "a+b"

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

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

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


免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈