精华内容
下载资源
问答
  • C++文件读取

    2012-01-04 21:09:33
    C++文件读取
  • c++文件读取

    2012-03-24 07:28:06
    c++简单文件读取程序,包含读取某一行内容,读取文件到数组。
  • C++ 文件读取

    2019-03-19 16:48:20
    #include<iostream> #include<fstream> #include<string> using namespace std; int main() { ifstream file; file.open("task1.txt",ios::in); if(!file.is_open()) return 0;... ...
    #include<iostream>
    #include<fstream>
    #include<string>
    using namespace std;
    int main()
    {
     ifstream file;
     file.open("task1.txt",ios::in);
     if(!file.is_open()) return 0;
     string str;
     while(getline(file,str))
     {
      cout<<str<<endl;
     }
     return 0;
    }
    展开全文
  • C++文件读取,写入

    2015-08-28 17:15:49
    c++ 文件读取,创建,写入,简单的DEMO,获取文件路劲
  • c++ 文件读取函数总结

    千次阅读 2017-09-17 01:01:48
    c++ 文件读取函数总结IO相关类继承关系 本文讲解文件读写,因此主要介绍相关类以及的fopen。

    c++ 文件读取函数总结

    IO相关类继承关系
    iostream.gif

    本文讲解文件读写,因此主要介绍<fstream>相关类以及<stdio.h>fopen

    ifstream

    ifstream 是用来操作文件的输入流类。文件流通过构造函数或者通过调用open函数来完成与文件的绑定。

    打开文件

    1. 通过构造函数
      std::ifstream ifs ("test.txt", std::ifstream::in);

    2. 通过open()函数

    std::ifstream ifs;
    ifs.open("test.txt",std::ifstream::in);

    一个一个字符读取 std::istream::get

    可以一个一个读取并返回读取到的值,或者读取连续(n-1)个字符并保存在字符数组中。这种读取方式不怎么适用。

    void getbychar(){
        std::ifstream ifs("test.txt", std::ifstream::in);
        char str[256];
        ifs.get(str, 10); // 从ifs中读取10-1=9个字符,保存在str内
        std::cout << "str: " << str << std::endl;
    
        char c = ifs.get();  // 一次读取一个字符
        while (ifs.good()) {
            std::cout << c;
            c = ifs.get();
        }
        ifs.close();
    }

    一行一行读取

    istream& getline (char* s, streamsize n );
    istream& getline (char* s, streamsize n, char delim );

    一次读取一行,从流中读取字符并将其保存于c字符串中,知道遇到界定符delim(’\n’)或者已经向s写入了n个字符。

    需要注意的是n要大于文件中最长的一行的字符数。如果此函数因为已经读取了n个字符而停止但是却没有找到界定符,那么failbit将会被设置。

    void getbyline(){
        std::ifstream ifs("test.txt", std::ifstream::in);
        char str[256];
        while(ifs.good()){ // 如果想测试只读取一行中一些字符,判断内可改为 !ifs.eof() && !ifs.fail()
            ifs.getline(str,256);
            std::cout << str << std::endl;
        }   
    }

    >>操作符就和我们常用的cin>>一样的用法

    void getlikecin(){
        std::ifstream ifs("test.txt");
        std::string str;
        int num;
        ifs >> num;
        std::cout << num << std::endl;
        while(ifs.good()){
            ifs >> str;
            std::cout << str << std::endl;
        }   
        ifs.close();
    }

    如果你运行了上面这个程序,你会发现,最后一个字符串会被输出两次!这是因为ifs完成最后一次读取后不会立即设置eof状态,所以程序会再进行一轮循环,在这轮循环ifs才会设置eof状态。结果就是最后一次读取的内容被输出了两次。

    while循环可改为:

    while(ifs>>str){
    std::cout << str << std::endl;
    }

    或者

    while(ifs.good()){
        if(ifs >> str)
            std::cout << str << std::endl;
    } 

    stdio.h

    C语言类型的文件读写,只需#include <stdio.h>即可。

    打开文件
    FILE * fopen ( const char * filename, const char * mode );
    mode 可取

    mode description
    “r” 读:打开一个文件进行读取操作。文件必须已经存在
    “w” 写:创建一个空文件进行写操作。若同名文件已经存在,则会清空原文件的内容。
    “a” 附加:打开一个文件,在文件末尾进行写操作。若文件不存在,则会创建新文件。
    “+” 更新:需要和上述r/w/a进行结合,结合后文件将会变成即可读也可写。
    “b” 二进制读写:需要和上述模式进行结合成”rb”,”wb”,”ab”
    “x” 避免重写已有文件:新C标准但不是C++的一部分,通过和”w”结合成”wx”,”wbx”等,若同名文件已存在,则会迫使此函数失败。
    FILE *pFile;
    pFile = fopen("test.txt","r");

    读取文件
    int fscanf ( FILE * stream, const char * format, ... );
    根据format声明的格式从stram中读取数据并保存在后面的参数中。这种读取适用于文件格式固定,每个字段类型确定的情况下进行读取操作。

    #include <stdio.h>
    
    int main ()
    {
      char str [80];
      float f;
      FILE * pFile;
    
      pFile = fopen ("myfile.txt","w+");
      fprintf (pFile, "%f %s", 3.1416, "PI"); // 先向文件写入 3.1416 PI
      rewind (pFile); // 设置pFile的位置指示回到文件开头
      fscanf (pFile, "%f", &f);  // 读取一个浮点数
      fscanf (pFile, "%s", str);  // 读取一个字符串
      fclose (pFile);
      printf ("I have read: %f and %s \n",f,str);
      return 0;
    }
    展开全文
  • c++ 文件读取,链表操作例子,读文件流
  • C++文件读取操作详解

    千次阅读 2016-07-25 20:30:57
    C++文件读取操作详解 http://blog.csdn.net/blues1021。 图片来自:http://www.cplusplus.com/reference/iolibrary/ 上面的C++ IO类继承关系图,这里的箭头不是子类指向父类的继承,而是指父类派生子...

    C++文件读取操作详解

    http://blog.csdn.net/blues1021。

    图片来自:http://www.cplusplus.com/reference/iolibrary/
    上面的C++ IO类继承关系图,这里的箭头不是子类指向父类的继承,而是指父类派生子类的方向。这里主要描述ifstream类/oftream类/fstream类的使用细节和这些类的系统内部同步缓存机制。

    一、文件打开的方式和默认选项
    // 附加到末尾,原来的数据不变
    ios::app Opens an output file for appending.
    // 文件打开后定位到文件尾,ios:app就包含有此属性
    ios::ate Opens an existing file (either input or output) and seeks the end.//附加到末尾原来的数据会被清空(单独或与out组合),当与in或app组合时候会附加到末尾。
    ios::in Opens an input file. Use ios::in as an open_mode for an ofstream file to prevent truncating an existing file.  
    ios::out Opens an output file. When you use ios::out for an ofstream object without ios::app, ios::ate, or ios::in, ios::trunc is implied.
    ios::nocreate Opens a file only if it already exists; otherwise the operation fails.
    ios::noreplace Opens a file only if it does not exist; otherwise the operation fails.
    ios::trunc Opens a file and deletes the old file (if it already exists).
    ios::binary Opens a file in binary mode (default is text mode).

    fstream默认是以ios::in|ios::out方式打开文件。
    ifstream默认是以ios::in方式打开文件。
    ofstream默认是以ios::out|ios::trunc方式打开文件,所以oftream一不小心就会覆盖掉之前的文件。

    二、文件流对象打开文件(及内核缓存)和关闭文件(及内核缓存)
    fstream有两个子类:ifstream(input file stream)和ofstream(outpu file stream)。ifstream默认以输入方式打开文件,而ofstream默认以输出方式打开文件。 
    三个类可以用open打开文件,close关闭文件;且构造函数中都封装了open方法,析构函数中封装了close方法。
    1)构造析构方式:如果文件流对象只是函数内操作一个文件的临时对象,那么可以用构造函数打开,临时对象生命期到的时候会自动调用 
    析构函数释放文件句柄和关联的内核读写缓存。
    2)open/close方式:如果文件流对象是一个类数据成员或者操作多个文件,那么需要用open打开文件,用close关闭文件,关闭了以后就可以打开另一个文件。

    三、C++文件操作常用函数:

    1)通用的函数:
    void open(const char* filename,int mode,int access); 
    打开文件的属性取值是: 
    0:普通文件,打开访问  1:只读文件  2:隐含文件  4:系统文件  
    可以用“或”或者“+”把以上属性连接起来 ,如3或1|2就是以只读和隐含属性打开文件。
    fstream file1;  
    file1.open("c:config.sys",ios::binary|ios::in,0);

    is_open判断是否打开成功的函数。

    2)流状态检测函数:
    eof()是否结束的判断。
    bad()函数,如果在读写过程中出错,返回 true。
    例如:当我们要对一个不是打开为写状态的文件进行写入时,或者我们要写入的设备没有剩余空间的时候。
    fail()函数,除了与bad() 同样的情况下会返回 true 以外,加上格式错误时也返回true ,例如当想要读入一个整数,而获得了一个字母的时候。
    good()判断流是否是好的,比如经常用到的标准输入cin,要读入一个int型的数据时,却读到了一个char,这是cin.good()就返回false,表示输入流出错了。
    clear()函数重置以上成员函数所检查的状态标志。

    3)流指针相关函数
    所有输入/输出流对象(i/o streams objects)都有至少一个流指针,流指针相关函数:
    含有g的函数是input ifstream中的获取操作流指针位置的函数,含有p的函数是output stream中获取操作文件流指针的函数。

    tellg() 和 tellp()  
    这两个成员函数不用传入参数,返回pos_type 类型的值(根据ANSI-C++ 标准) ,就是一个整数,代表当前get流指针的位置(用tellg)
    或put流指针的位置(用tellp)。

    seekg() 和seekp()  
    这对函数分别用来改变流指针get 和put的位置。两个函数都被重载为两种不同的原型: 
    seekg ( pos_type position ); seekp ( pos_type position );  
    使用这个原型,流指针被改变为指向从文件开始计算的一个绝对位置。
    要求传入的参数类型与函数 tellg 和tellp 的返回值类型相同。 
    seekg ( off_type offset, seekdir direction ); 
    seekp ( off_type offset, seekdir direction );  
    使用这个原型可以指定由参数direction决定的一个具体的指针开始计算的一个位移(offset)。它可以是:
    ios::beg, ios::cur, ios::end。

    文本文件对文件流指针不能使用seekp因为文本文件的某些特殊字符可能会被修改,可以使用seekg;文本文件不要对tellg,tellp返回的指针进行修改。
    二进制文件,可以随便的使用tellg,tellp,seekg,seekp函数来获取和修改流指针位置。

    四、文件文件读写方式
    文本文件读取:
    <<输出重载运算符,>>输入重载运算符。
    getline获取一行

    操纵符 功能 输入/输出  
    dec 格式化为十进制数值数据 输入和输出  
    endl 输出一个换行符并刷新此流 输出  
    ends 输出一个空字符 输出  
    hex 格式化为十六进制数值数据 输入和输出  
    oct 格式化为八进制数值数据 输入和输出 
     setpxecision(int p) 设置浮点数的精度位数 输出 
    比如要把123当作十六进制输出:file1<<hex<<123;要把3.1415926以5位精度输出:file1<<setpxecision(5)<<3.1415926。
    文本方式读入二进制文件会失败,读取文件文件会将"\r\n"翻译为"\n"后输出。

    五、二进制文件读写方式
    在二进制文件中,使用<< 和>>,以及函数(如getline)来操作符输入和输出数据,没有什么实际意义,虽然它们是符合语法的。
    put()函数
    get()函数。

    块状读取函数:
    文件流包括两个为顺序读写数据特殊设计的成员函数:write 和 read。
    第一个函数 (write) 是ostream 的一个成员函数,都是被ofstream所继承。
    而read 是istream 的一个成员函数,被ifstream 所继承。
    类 fstream 的对象同时拥有这两个函数。它们的原型是: 
    write ( char * buffer, streamsize size ); 
    read ( char * buffer, streamsize size );  
    这里 buffer 是一块内存的地址,用来存储或读出数据。参数size 是一个整数值,表示要从缓存(buffer)中读出或写入的字符数。
    二进制读写文件可以节省内存和提高速度,二进制方式读取二进制文件是内存中一样的数据,二进制读取文本文件"\r\n"不会被翻译为"\n",故二进制读取的文件都是原始不经任何翻译改变的数据。

    六、缓存和同步(Buffers and Synchronization)
    C++中缓冲区的刷新机制:
    当我们对文件流进行操作的时候,它们与一个streambuf 类型的缓存(buffer)联系在一起。这个缓存(buffer)实际是一块内存空间,
    作为流(stream)和物理文件的媒介。例如,对于一个输出流, 每次成员函数put (写一个单个字符)被调用,
    这个字符不是直接被写入该输出流所对应的物理文件中的,而是首先被插入到该流的缓存(buffer)中。 
    当缓存被排放出来(flush)时,它里面的所有数据或者被写入物理媒质中(如果是一个输出流的话),
    或者简单的被抹掉(如果是一个输入流的话)。这个过程称为同步(synchronization),它会在以下任一情况下发生:

    1)当文件被关闭时: 在文件被关闭之前,所有还没有被完全写出或读取的缓存都将被同步。   
    2)当缓存buffer 满时:缓存Buffers 有一定的空间限制。当缓存满时,它会被自动同步。   
    3)控制符明确指明:当遇到流中某些特定的控制符时,同步会发生。这些控制符包括:flush 和endl。   
    4)明确调用函数sync(): 调用成员函数sync() (无参数)可以引发立即同步。
    这个函数返回一个int 值,等于-1 表示流没有联系的缓存或操作失败。

    C语言中下列情况会引发缓冲区的刷新:
    1)缓冲区满时;
    2)行缓冲区遇到回车时;
    3)关闭文件;
    4)使用特定函数刷新缓冲区。

    清除和设置文件缓冲区

    (1).清除文件缓冲区函数: int fflush(FILE *stream); int flushall();
    fflush()函数将清除由stream指向的文件缓冲区里的内容,常用于写完一些数据后,立即用该函数清除缓冲区,以免误操作时,
    破坏原来的数据。 flushall()将清除所有打开文件所对应的文件缓冲区。

    (2).设置文件缓冲区函数 void setbuf(FILE *stream,char *buf); void setvbuf(FILE *stream,char *buf,int type,unsigned size);
    这两个函数将使得打开文件后,用户可建立自己的文件缓冲区,而不使用fopen()函数打开文件设定的默认缓冲区。
    对于setbuf()函数,buf指出的缓冲区长度由头文件stdio.h中定义的宏BUFSIZE的值决定,缺省值为512字节。
    当选定buf为空时,setbuf函数将使的文件I/O不带缓冲。而对setvbuf函数,则由malloc函数来分配缓冲区。
    参数size指明了缓冲区的长度(必须大于0),而参数type则表示了缓冲的类型,其值可以取如下值: type 值 含义 _IOFBF 文件全部缓冲,
    即缓冲区装满后,才能对文件读写 _IOLBF 文件行缓冲,即缓冲区接收到一个换行符时,才能对文件读写 _IONBF 文件不缓冲,
    此时忽略buf,size的值,直接读写文件,不再经过文件缓冲区缓冲。

    buf是自己申请的静态内存空间或者malloc出来的内存空间,设置进去。

    使用注意:
    1) 不管是C++还是C都存在读写缓存,平时默认缓存文件的读写,fread/fwrite等其实都是对默认缓存内存的读写,默认缓存的大小是512kb。
    2)读写缓存的目的是为了提高整体的读写效率,如果一些数据需要马上刷新到磁盘,可以调用刷新flush/fflush或同步函数。也可以取消同步std::ios::sync_with_stdio(false)。
    */
    #include "stdafx.h"
    #include <fstream>
    using namespace std;
    #include "CPPFILE_OPR.h"

    void CppFileOperate::process()
    {
     ofstream ofile("f:\\test.txt",ios::ate | ios::in);
     ofile.open(ios_base::_Openprot)
     if(ofile.is_open())
     {
      ofile<<"456"<<endl;
      ofile.close();
     }
     ofile.eof();
     FILE
     //while(1);
    }
    更多的细节参考标准文档:
    展开全文
  • c++文件读取最后一行读取两次的问题新人博客。本来记笔记用word,写博客查阅更方便,资料也不容易丢失还能与人交流,也就转战博客了。在做c++文件流的题目时要求将20个数据从文件中读取到一个长度为20的向量中,我...

    c++文件读取最后一行读取两次的问题

    新人博客。

    本来记笔记用word,写博客查阅更方便,资料也不容易丢失还能与人交流,也就转战博客了。


    在做c++文件流的题目:要求将20个数据从文件中读取到一个长度为20的向量中,我本来是这么写的:

        i=0;
        while(in.eof()==false)
        {
            if(in.bad()==false&&in.fail()==false)
            {
                in>>A[i];
                i++;
            }
        }

    总是报错:向量的下标超过了范围。虽然向量是容器可以随意伸缩但问题出在了文件读取上。
    谷歌一下(搜索引擎真是最好的老师)知道eof()是读取文件结束符才结束,程序会以为未结束导致多读了一次。

    文件最后字符->结束符

    有个简单方法解决:

        i=0;
        while(in.eof()==false)
        {
            if(in.bad()==false&&in.fail()==false)
            {
                in>>A[i];
                i++;
            }
            in.get();//获取之后一个字符
            if (in.peek()==EOF)
                break;
        }

    peek方法可以返回下一个却不移动指针

    只有文件最后一行是空行才会出现这种问题。

    也可以用istringstream流更好用
    点此

    展开全文
  • C++文件读取ifstream

    2020-06-10 00:02:40
    使用ifstream流来读取文件 说明: 1.ifstream类的对象创建成功的时候会返回非空值,借此判断是否创建文件对象成功 2.ifstream有个函数eof()用来判断文件是否读到尾部,没读到尾部返回false,否则返回true。 若尾部有...
  • C++文件读取随笔

    2018-02-10 13:44:42
    对于读取大容量视频文件时,推荐使用fopen()方式,ifstream和ofstrem在读取和写大容量文件时,会遇到文件读取和写入错误的问题。
  • C++ 文件读取 & 写入实例

    千次阅读 2020-08-08 16:18:25
    该数据类型通常表示文件流,且同时具有 ofstream 和 ifstream 两种功能,这意味着它可以创建文件,向文件写入信息,从文件读取信息。 要在 C++ 中进行文件处理,必须在 C++ 源代码文件中包含头文件 <...
  • c++文件读取用线程快? 前几天,我在其中一家公司进行面试时,有人问我以下问题:如何计算带有4gb RAM的50gb文件中单词的出现次数。 诀窍是不将整个文件加载到内存中,而是在继续移动文件指针时继续处理每个单词。 ...
  • C++文件读取输出

    2018-12-03 12:33:32
    文件中一行中读取两个数,然后相加写入另一个文件 #include &lt;fstream&gt;//用到文件的头文件 #include &lt;iostream&gt; using namespace std; int main() { long a,b,c;//后面数据比较...
  • C++文件读取与输入

    2021-03-10 10:39:42
    一般使用ios::in从文件读取内容后,读取以后想在界面上输出显示有三步; 1)针对读取的内容进行声明 int ,double,char等; 2)使用fin>>xxxxxx;来输入所读的数据; 3)最后cout<<xxxxx; 一般使用...
  • C++文件读取问题

    2018-08-17 16:14:27
    1. 文件逐行读取 逐行读取, 行之间用回车换行符间隔 std::ifstream fin(fileName.c_str()); if(fin.is_open()) { std::string oneLine = ""; while(getline(fin, oneLine)) { ...... } fin....
  • 读取文件中的英语文章,用c++实现对文件读取,从而统计不同单词个数,最后用堆排序,实现频率从大到小的排列,结果写入文件
  • *记录自己日常遇到的问题*C语言文件操作方法C++文件操作方法 C语言文件操作方法 int a; FILE *fp; fp=fopen("***.text","w+"); fscanf(fp,"%d",a);//读取文件中的整形数字,指针遇空格停止 fprintf(fp,"%d",10);//...
  • C++文件读取语言

    2017-05-14 13:57:16
    ifstream, 类似istream, 有一个被称为get pointer的指针,指向下一个将被读取的元素。 ofstream, 类似 ostream, 有一个指针 put pointer ,指向写入下一个元素的位置。 fstream, 类似 iostream, 同时继承了get 和 ...
  • c++文件读取一行数据

    2021-04-12 10:01:34
    #include<iostream> #include<fstream> using namespace std; int main() { ifstream fin("retail.dat");... //第一次将缓冲区中的字符串用空格分隔,并返回第一个子串 p = strtok
  • C++文件读取与字符分割

    千次阅读 2016-08-23 18:11:37
    记录了文件读取和字符串分割的基本操作
  • C++折中查找 自学 例题:假设学生记录文件 students.dat 是按照姓名排好序的,编写程序,在 students.dat 文件中用折半查找的方法找到姓名为 Jack 的学生记录,并将其年龄改为 20(假设文件很大,无法全部读入内存...
  • https://www.cnblogs.com/VVingerfly/p/4435898.html
  • C++文件读取效率比较 (附C++代码)

    千次阅读 2019-03-06 16:05:19
    测试下,同样的文件file &gt;&gt;形式要比getline效率高 输出为 getline函数读取用时 : 365776 file &gt;&gt;读取用时 : 273242 代码 第3行自行设置文件路径。 int main...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 9,563
精华内容 3,825
关键字:

c++文件读取

c++ 订阅