C/C++对文件的读写

来源:互联网 发布:c语言buffer 编辑:程序博客网 时间:2024/05/24 01:37

C/C++对文件的读写

学习在于总结

c/c++语言的相似度非常大。不管从事哪一个方向的开发,对c/c++都应该有了解,因为它们是操作系统的开发语言。了解它们对任何开发都是有好处的。
因为c++兼容c语言,所以c语言对文件的读取,c++都是可以运用的。当然c++也有专用于它的文件读写,更加的方便 和简单。

c语言对文件的读写

#include <iostream>#include <stdio.h>using namespace std;void readFile();void writeFile();int main(){    //读取文件内容    readFile();    //向文件写入内容    writeFile();    return 0;}void readFile(){    char fileName[256] = { 0 };    FILE* file;    while(true)    {          cout << "please input fileName:";        cin >> fileName;        cout <<fileName<<endl;        if((file = fopen(fileName,"r")) == NULL)//“r”为读取文件内容,如果不存在文件则返回null,详细见下面的writeFile()方法        {           cout <<"Error!!"<<endl;           continue;        }        //导航到文件末尾         fseek(file,0,SEEK_END);         //得到文件的字节数         int l = ftell(file);         //回到文件开头         //fseek(file,0,SEEK_SET);//用fseek定位到文件开头         rewind(file);//回到文件起始位置         //输出文件的长度         cout<<l<<endl;         //用fscanf循环输出文件中的内容         /*for(int i = 0; i < l; i++)         {            char ch;            fscanf(file,"%c",&ch);            cout << ch;         }         */         //用feof函数来判断文件是否指向末尾         //因为用feof进行判断文件是不是结束的时候,当指针指向最后一个字符的时候,依然存在字符,所以不会认为是文件最后,会继续向后面多读取一个字符。         //只有当指针指向的地方没有东西或者乱码时,才会认为是指向了最后。所以往往会多读取一个字符,最后多读取的字符往往为乱码,读取之后,才能知道是文件最后了,但是也要读,所以是乱码。这个乱码字符已经读取了。         //因为无法阻止它多读,所以只能不让最后一个乱码输出,来解决多输出一个字符的问题。所以用下面代码来表示:         cout << "feof" <<endl;          char ch;         fscanf(file,"%c",&ch);//先读取一个字符,让文件指针指向第一个字符,即指针向后移动一位。因为刚开始指针不指向第一个字符,而是指向第一个字符前面,文件头         while(!feof(file))//首先判断读取的第一个字符的位置是不是文件结束,不是的话则进入循环,输出第一个字符(然后在向后读取一位,让指针向后移动,指向读取的这一位,然后判断这一位是不是空,是的话则结束,说明这一位读出来的内容是乱码)。                           //是的话则结束,则说明读取的内容是乱码,文件是空文件,也不用输出了,因为会是乱码。         {             cout <<ch;             fscanf(file,"%c",&ch);         }         /*         //用fread读取文件中的内容,块读取         //fileContent储存读出来的内容         char* fileContent = new char[l];         fread(fileContent,l,1,file);//fileContent为储存内容的数组;l为读取字节的长度;1表示只读取一边;file为文件的指针         //输出内容         cout << fileContent <<endl;         */         /*         //得到一个字节         //因为用feof进行判断文件是不是结束的时候,当指针指向最后一个字符的时候,依然存在字符,所以不会认为是文件最后,会继续向后面多读取一个字符。         //只有当指针指向的地方没有东西时,才会认为是指向了最后。所以往往会多读取一个字符,最后多读取的字符往往为乱码,读取之后,才判断出来是文件最后了,但是这个乱码字符已经读取了。         //因为无法阻止它多读,所以只能不让最后一个乱码输出,来解决多输出一个字符的问题。所以用下面代码来表示:         char ch  = fgetc(file);         while(!feof(file));         {             cout << ch;             ch = fgetc(file);         }         */         /*         //读取一个字符串         char* fileContent = new char[l];         fgets(fileContent,l,file);//fileContent为储存读取内容的数组,l为读取的最大长度,file为读取的文件的指针         cout << fileContent;         */         cout <<endl;         fclose(file);         break;     }}void writeFile(){    char fileName[256] = { 0 };    FILE* file;    while(true)    {        cout << "please input fileName:";        cin >> fileName;        file = fopen(fileName,"a");//"r"打开文本文件进行读写,不存在,则返回NULL                            //"a"如果存在文件,则在文件末尾加入内容,如果不存在则新建文件。                            //“w”如果存在文件,则将文件删除,从新创建。如果不存在则新建文件。                            //“r+”打开文本文件进行读/写,如果不存在则返回NULL                            //“w+”建立新文本文件进行读/写,如果存在文件,则将文件删除,从新创建。如果不存在则新建文件                            //“a+”如果存在文件,则向文件末尾追加读/写,如果不存在则新建文件进行读/写(用a+最后可能多输入几个乱码字符,原因未知)        //读取文件目前具有的字符个数        fseek(file,0,SEEK_END);        int l = ftell(file);        cout << "begin:" << l << endl;        fseek(file,0,SEEK_SET);//还可以用rewind(file);        /*        //以fprintf的方式向文件写内容        char ch[10]={'b','b','b','b','b','b','b','b','b','b'};        fprintf(file,"%s",ch);        printf("%s",ch);        */        /*        //以fputc的方式向文件写入一个字符        char ch = 'a';        fputc(ch,file);//ch为要写入的字符,file为文件指针        */        /*        //以fputs的方式向文件写入一个字符串        char ch[10]={'b','b','b','b','b','b','b','b','b','b'};        fputs(ch,file);//ch为要写入的字符串,file为文件指针        */        //以fwrite的方式向文件写入内容块        char ch[10]={'b','b','b','b','b','b','b','b','b','b'};        long lenth = 10l;        int  count = 2;        fwrite(ch,lenth,count,file);//ch为要写入的内容,lenth为写入内容的大小,count为写入次数,可以写入多次,file为写内容的文件指针        //读取文件最后的字符个数        fseek(file,0,SEEK_END);        int l1 = ftell(file);        cout << "end:" << l1 << endl;        fseek(file,0,SEEK_SET);        fclose(file);//关闭文件    }}

c++对文件的读写

#include <iostream>#include <fstream>#include <string>using namespace std;void readFile();void writeFile();int main(){   // readFile();    writeFile();}void readFile(){   char fileName[255] = {0};   while(true)   {      cout << "please input fileName:";      cin >> fileName;      ifstream in; //输入流      in.open(fileName);//打开文件      if(in == NULL)      {          cout << "Error!!"<< endl;          continue;      }      in.seekg(0,ios::end);//从结束位置开始计算偏移量,“ios::cur”从当前位置开始计算偏移量      int len = in.tellg ();      cout << len << endl;      in.seekg(0,ios::beg);//从文件开始位置开始计算偏移量      //read方式读取文件内容      /*       //读取全部内容      char* fileContent = new char[len];      in.read (fileContent,len);//fileContent存储读取的内容,len为读取的长度      cout << fileContent << endl;      */      /*      //读取一个字符      char* ch = new char[1];      in.read(ch,1);      cout <<ch <<endl;      */      //getLine方式读取一行      /*      //方法1:      string str;      getline(in,str);      cout <<str<<endl;      */      /*      //方法2:      char* fileContent = new char[len-5];      in.getline (fileContent,len-5);      cout <<fileContent<<endl;      */      /*      //读取单个字符      char ch;      for(int i = 0; i < len; i++)      {         in >> ch;         cout << ch;      }      */      /*      //读取字符串      string st ;      in >> st;      cout<<st;      */      //读取一个字符数组      char ch[len] = {0};      for(int i = 0; i <len ;i++)      {          in >> ch[i];          cout << ch[i];      }      cout << endl;      in.close();   }}void writeFile(){    char fileName[255] = {0};    cout << "please input fileName:";    cin >> fileName;    ofstream out;    out.open(fileName);    if(out == NULL)    {        cout << "Error!!"<<endl;        return ;    }    while(true)    {        /*        //向文件写入单个字符        char ch = 'c';        out << ch;        */        /*        //向文件写入数组        char ch[10] = {'a','b','c','d','e','f','j','f','g','h'};        out << ch;        */        /*        //向文输出字符串        string str = "123456";        out <<str;        */        /*        //以write方式向文件写内容        char ch[10] = {'1','2','3','4','5','6','7','8','9','0'};        out.seekp (0,ios::end);//定位到文件末尾写入        out.write (ch,10);//ch为要写入的内容,10为写入的长度        */        //向文件写入一个字符        char ch = 'b';        out.put(ch);//输入一个字符        break;    }    out.close();}

总结

以上内容就是我总结的 文件读取。如果不全,以后会补充完整。

0 0