首页 百科知识 文件的读取_C语言入门

文件的读取_C语言入门

时间:2021-09-15 百科知识 联系我们

文件的读取_C语言入门

现在我们要说的是文件的操作,一直在黑乎乎的控制台上操作想必大家都厌烦了,心想是不是可以把信息写在txt等文件里面呢?当然是可以的,接下来我们就说说文件的读写。

        大家还记得我们在开始说gets()这个函数的时候我们顺便便说了一个fgets()吗?当时我们说这个函数是gets的文件版本,而且是一个安全版本,当时我们没有细说,留待以后再说,今天该是我们说这个函数的时候了,不过在说这个函数之前,我们先来看看fopen()。

        fopen()顾名思义就是open file的意思,他是以文件名为参数,同时返回一个指向文件结构的指针。例如我们要是想要打开一个名为“lizi.txt”的文件,我们以读写模式来打开。

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

FILE * fp;

fp = fopen("lizi.txt","r|w");

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

      通常情况下,我们要判断我们要开打的文件是否被打开,如果打开,fopen便是指向FILE的指针,如果打开失败,便返回一个空指针。

      还记得我们的fgets()函数的原型吗?他的第三个参数就是一个FILE的指针,所以当得到这个指针之后,我们便可以将该指针传递给fgets,然后就能够读取该打开文件的内容了。

        和fgets匹配的便是fputs,我们可以将这个fgets读取的字符串通过fputs输出,可以在标准框里输入,也可以把他输入指定的文件之中。我们来看看下面的这个例子:

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

#include <stdlib.h>
#include <stdio.h>
int main()
{
     char ch[20];
     FILE *file;
     file = fopen("lizi.txt","r");
     if(file == NULL)
             printf("打开文件失败.\n");
      fgets(ch,20,file);
      fputs(ch,stdout); 
      system("PAUSE");
      return 0;
}

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

     我们在该程序的文件里建发文本文档,然后命名为“lizi",然后在里面输入Hello world。然后我们运行程序,可以看到标准输出Hello world。大家如果有兴趣,可以尝试一下其他的。

     大家尝试过之后可能会问,为什么只能读取第一行呢?是啊,问题出在那里呢?我们再来看看fgets()这个函数吧。

     fgets()他可以读取一连串的字符串,但是会在碰到回车后停止读取,所以他读取我们的第一行。那么有没有办法让把整个文件读完呢?答案是肯定的,我们可以通过使用一个循环来完成,但是大家是不是又想问,用循环的话那怎么控制循环呢?

      每个文件都有一个结尾符,便是End Of File,在C/C++里,我们称它为EOF,而fgets同样不例外,在遇到eof之后便不会再读取了,所以我们便利用这一点来控制这个循环。又由于fgets()返回一个指向char的指针,这将和eof类型不同,在这里我们不能强制转换,如果你要是转换,那就是出大事了,既然不能转换的话该怎么办呢?我们可以这么想,如果fgets()没东西可以读取,那么返回的岂不是NULL指针吗?所以我们将程序这么改一下:

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

#include <stdlib.h>
#include <stdio.h>
int main()
{
     char ch[20];
     FILE *file;
     file = fopen("lizi.txt","r");
     if(file == NULL)
             printf("打开文件失败.\n");
      while(fgets(ch,20,file) != NULL)
             fputs(ch,stdout); 
      system("PAUSE");
      return 0;
}

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

      我们这样一修改,就能够读取所有的内容了。

      那么,我们要怎么才能将文件写入另一个文件呢?大家还记得fputs()的第二参数是什么吗?

      fputs的第二个参数便是FILE的指针,所以我们可以创建一个文本文件,然后把指向他的指针传递给fputs(),便可以把文件信息写入该文本。怎么获得这个指针呢?我们依然可以用fopen()这个函数来获得该指针。

-----------------------------------(www.guayunfan.com)

FILE *file2;

file2 = fopen("write","w");

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

      fopen的第二个参数现在是w,这个w的意义是打开一个文件用来进行更新写操作,第一个参数是要打开的文件名,当然如果不存在该文件的话,便会创建该文件。所以如果要想把文件从一个文本写入另一个文本之中,我们可以把上面的代码修改一下即可,如下:

 

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

#include <stdlib.h>
#include <stdio.h>
int main()
{
     char ch[20];
     FILE *file;

     FILE* file2;
     file = fopen("lizi.txt","r");

     file2 = fopen("write.txt","w");
     if(file == NULL)
             printf("打开文件失败.\n");
      while(fgets(ch,20,file) != NULL)
             fputs(ch,file2); 
      system("PAUSE");
      return 0;
}

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

      再次运行便会发现在我们的目录下多了一个名叫write的文本文件,打开看一下会发现里面的内容和我们原文件相同。

      说到此处,那么我们怎么才能运行期打开一个文本文件呢?为了更好的说明这种使用法,我们来看下面的例子:

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

#include <stdlib.h>
#include <stdio.h>
int main()
{
     char ch[20],name1[20],name2[20];
     FILE *file;

     FILE* file2;

     puts("请输入要打开的文本文件:");

     gets(name1);
     puts("请输入要写入的文件名:");
     gets(name2);

     file = fopen(name1,"r");

     file2 = fopen(name2,"w");
     if(file == NULL)
             puts("打开文件失败.");
      while(fgets(ch,20,file) != NULL)
             fputs(ch,file2); 
      system("PAUSE");
      return 0;
}

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

     在输入文件名时记得带上路径,比如说如果我们想要打开一个D盘下面的文件,我们可以这么写:

D:\\lizi.txt

      注意到了吗?我们这里用了两个\\,还记得我们以前的那些转义符吗?很多都是要添加一个\,我们用得最多的就是换行了\n,所以如果我们想要获取一个\,那么就要输入两个\\。同样对于我们的目标文件,同样还要这么写,不过不添加地址,就会自动在我们的程序目录生成这个文件。

       关于文件的读取,今天就说到这里吧,下面还有几个函数呢,我在想是要大家去自己研究呢还是我拿出来说一下呢?我先想想吧。