c++中的文件处理.它是如何工作的

File Handling in C++.. How does it work?

本文关键字:何工作 工作 文件 处理 c++      更新时间:2023-10-16

我偶然发现这段代码是用来在c++中生成。dat文件的。

这两行我听不懂…这些是如何工作的呢?

outfile.write(reinterpret_cast<char*>(&pers), sizeof(pers));
ofstream outfile("PERSON.DAT",ios::app| ios::binary);
#include <fstream> //for file streams
#include <iostream>
using namespace std;
class person //class of persons    
{
protected:
    char name[80]; //person’s name
    short age; //person’s age
public:
    void getData() //get person’s data
    {
        cout <<"Enter name: "; cin >> name;
        cout <<"Enter age: "; cin >> age;
    }
};
int main()
{
    char ch;
    person pers; //create a person
    ofstream outfile("PERSON.DAT",ios::app| ios::binary);
    do {
        pers.getData(); //get data for person
        outfile.write(reinterpret_cast<char*>(&pers), sizeof(pers));
        cout <<"Enter another person (y/n)? ";
        cin >> ch;
    } while (ch == 'y');
    //create ofstream object
    //write to it
    return 0;    
}
ofstream outfile("PERSON.DAT",ios::app| ios::binary);

从第二行开始,它创建一个输出文件流,然后使用两种模式的组合打开一个名为"PERSON.DAT"的文件;追加和二进制。这意味着发送到输出流的任何数据都将被附加到文件中的现有数据中,您实际上是在向文件添加数据,而不是覆盖它。二进制模式指定写入文件的任何数据都将按原样解释。在Windows中有一种称为文本模式的模式,在这种模式下,某些字符(如'n')会被翻译成Windows对应的字符。二进制模式是标准模式,它只是意味着你发送到输出流的任何内容都不会被修改。

outfile.write(reinterpret_cast<char*>(&pers), sizeof(pers));

该命令将pers对象写入输出文件。write()方法需要两个参数;第一个是指向要写入文件的一系列字节的指针,第二个是一个整数,表示要写入的一系列字节的数量。reinterpret_cast()函数将指向person对象的指针从person*强制转换为char*,这是write方法所需的参数类型。sizeof()只是一个以字节为单位获取对象大小的函数,如前所述,write()也需要此函数。

他们只是一个字节一个字节地写内存结构,从对象在内存中的起始位置开始,然后按照对象的大小来写,就好像它只是一堆char

这不是最聪明的想法,作者可能会在某些时候遇到不可预见的复杂情况。