跳转至

文件

一、操作

  1. 操作过程
  2. 打开文件:建立一个文件和流的对应关系
  3. 读写文件
  4. 关闭文件:释放文件所占用的资源
  5. C++的文件类

二、文件的打开与关闭

⚠️upload failed, check dev console

  1. 打开

  2. 打开方式

    1. open函数(函数原型:void open(const char *szFilename, int mode))

      fstream outFile;
      outFile.open("text.txt", ios::out);
      
      1. argu1 指针指向含路径的文件名

      2. argu2 文件打开的模式

        控制符 适用对象 作用
        ios::in ifstream, fstream 只读存在文件
        ios::out ofstream, fstream 只写,新建文件
        ios::app ofstream, fstream 在文件尾部追加,不存在则新建
        ios::ate ifstream 从尾部只读
        ios::trunc ofstream 单独使用,同out
        ios::binary 三个皆可 在文件尾部追加
        ios::in|ios::out fstream 读写存在文件
        ios::in|ios::out|ios::trunc 读写文件,存在清楚内容,不存在新建

        文件打开模式通过|来组合

    2. 定义流对象时,通过构造函数打开

      fstream outFile("test.txt", ios::out);
      
  3. 注意:要判断文件是否打开

  4. 关闭

  5. file.close();

三、写入文件

  1. 写入与在屏幕上输出类似,使用流
#include <fstream>
using namespace std;
int main(){
    fstream outFile("text.txt",ios::out);
    if(!outFile){
        cout << "open failed";
        exit(0);
    }
    outFile << 5 << "string" << 1.2;
    outFile.close();        //关闭文件

    return 0;
}

四、读文件

  1. 同上
#include <fstream>
using namespace std;
int main(){
    fstream outFile("text.txt",ios::out);
    if(!outFile){
        cout << "open failed";
        exit(0);
    }
    int data;
    outFile >> data;
    outFile.close();        //关闭文件

    return 0;
}

五、二进制文件的读写

  1. 二进制文件使一标准数据的二进制表示方式存储,读取数据以字节为单位

  2. 优点:

  3. 节省空间

  4. 数据规整
  5. 便于索引

  6. 打开时,需要|ios::binary

  7. 读写文件:

  8. 读:

    1. istream &read(char *buff, int count);
    2. 作用:从文件当前位置读count字节,存放到buff中
  9. int gcount()
    1. 作用:当前读的字节数
  10. 写:

    1. ostream &write(char *buff, int count);
    2. 作用:将从buff开始的count字节写到文件的当前位置
  11. 程序示例

#include <iostream>
#include <fstream>
#include <cstdlib>
using namespace std;
int main(){
    fstream file;
    char msg[] = "This is a test message", buf[20];
    file.open("text.txt",ios::out|ios::in|ios::trunc|ios::binary);
    if(!file){
        exit(2);
    }
    file.write(msg, sizeof(msg));
    file.seekp(0,ios::beg);
    file.read(buf,20);
    cout << file.gcount() << endl;
    cout << buf << endl;

    return 0;
}

## 六、文件的定位操作

  1. 取文件当前位置的方法
    1. int tellg() //g代表get
    2. int tellp() //p代表put
  2. 改变文件指针的当前位置
    1. seekg(int offset, int mode)
    2. seekp(int offset, int mode)
    3. mode:
      1. ios::beg:文件开头
      2. ios::cur:当前位置
      3. ios::end:文件结尾
    4. 单位:字节