zoukankan      html  css  js  c++  java
  • C++中文件流操作

    一、C++中流和流操作符

      C++中把数据之间的传输操作称为流,流既可以表示数据从内存传送到某个载体或设备中,即输出流,也可以表示数据从某个载体或设备传送到内存缓冲区变量中,即输入流。C++输入输出除了read和write函数,还提供流操作符,可以重在,输入流操作符">>"和输出流操作符"<<"。

    • 标准I/O流:内存与标准输入输出设备之间信息的传递;《iostream》
    • 文件I/O流:内存与外部文件之间信息的传递;《fstream》
    • 字符串I/O流:内存变量与表示字符串流的字符数组之间信息的传递《sstream》

    二、文件流的基本操作

      1.确定文件打开的模式。可以选的模式主要有:

    ios::in 为输入(读)而打开一个文件
    ios::out 为输出(写)而打开文件 
    ios::ate 初始位置:文件尾 
    ios::app 所有输出附加在文件末尾 
    ios::trunc 如果文件已存在则先删除该文件 
    ios::binary 二进制方式

      2.默认情况下是以文本的方式写文件,并且会删除原本文件中的数据,即ios::trunc

      3.判断文件是否正常打开。好的文件操作习惯是,每次打开一个文件后,在进行文件写之前要判断文件是否正常打开,使用的函数是is_open()

      4.文件写。主要有下面三函数,<< 流操作符,写一个字符put(),写一块数据write;

    std::ostream::operator<<
    std::ostream::put
    std::ostream::write

    5.文件读。主要有流操作符>>,读一个字符get,读一行getline,读文件中一块read

    std::istream::operator>>
    istream& operator>> (int& val);
    std::istream::getline
    istream& getline (char* s, streamsize n );
    istream& getline (char* s, streamsize n, char delim );
    std::getline (string)
    istream& getline (istream& is, string& str, char delim);
    istream& getline (istream& is, string& str);
    std::istream::read
    istream& read (char* s, streamsize n);
    std::istream::get
    istream& get (char& c);

    6.文件结尾的判断 infile.eof()

    7.文件关闭 infile.close()

    8.文件定位 seekp(),seekg()

    9.文件修改,见实例

    1.1 文件写

    #include <string>
    #include <iostream>
    #include <fstream>
    
    using namespace std;
    int main() {
        /*
         * ios::app:添加,ios::trunc:如果文件存在,先删除该文件(默认)
         * bios::binary 二进制方式读写,默认是文本方式
         */
        ofstream outfile("testfile.txt",ios::out | ios::trunc);
        if(!outfile.is_open()){
            cerr << "file cannot open!" << endl;
            return -1;
        }
    
        outfile << "This is a test.
    ";
        outfile << 100 << endl;
    
        outfile.put('c');  // write a char.
        outfile.put('
    ');
    
        char buffer[1024] = "abc";
        outfile.write(buffer,sizeof(buffer)); // write a block.
    
        outfile.close();
    
        return 0;
    }

    1.2 文件读

    #include <string>
    #include <iostream>
    #include <fstream>
    
    using namespace std;
    int main() {
    
        ifstream infile("testfile.txt");
        if (!infile.is_open()) {
            cerr << "file cannot open!" << endl;
            return -1;
        }
    
        //读一个字符
        char ch;
        infile.get(ch);
    
        //读一个字符串
        string word;
        infile >> word;
    
        //读一行 常用
        infile.seekg(0);
        string line;
        getline(infile, line);
    
        char buffer[1024];
        infile.seekg(0); //定位到文件头
        infile.getline(buffer, sizeof(buffer));
        
        //读文件块
        infile.seekg(0);
        infile.read(buffer, sizeof(buffer));
    
        //判断文件结尾
        infile.seekg(0);
        while (!infile.eof()) {
            getline(infile,line);
    //        infile >> word;
    //        infile.read(buffer,sizeof(buffer));
        }
    
        infile.close();
        return 0;
    }

     1.3 文件内容修改

    #include <fstream>
    
    using namespace std;
    int main() {
        fstream inOutFile("testfile.txt",ios::in | ios::out);
        inOutFile.seekg(50);
        inOutFile << "修改文件很容易!
    ";
        inOutFile.close();
        return 0;
    }
  • 相关阅读:
    UE4使用第三方库读写xml文件
    ROS机器人程序设计(原书第2版)补充资料 教学大纲
    Unity UGUI图文混排(七) -- 下划线
    奥比中光Orbbec Astra Pro RGBD 3D视觉传感器在ROS(indigo和kinetic)使用说明 rgb depth同时显示
    Java复习之泛型
    Java复习之多线程
    Java复习之包及访问控制权限
    Java复习之异常
    Java复习之面向对象高级
    Java复习之面向对象基础
  • 原文地址:https://www.cnblogs.com/wxquare/p/6670562.html
Copyright © 2011-2022 走看看