c++中的文件处理.它是如何工作的
File Handling in C++.. How does it work?
我偶然发现这段代码是用来在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
。
这不是最聪明的想法,作者可能会在某些时候遇到不可预见的复杂情况。
相关文章:
- QSqlquery prepare()和bindvalue()不工作
- 导入库可以跨dll版本工作吗
- 以螺旋方式打印矩阵的程序.(工作不好)
- 对象指针在c++中是如何工作的
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- C++为线程工作动态地分割例程
- 为什么我的 std::ref 无法按预期工作?
- 布尔比较运算符是如何在C++中工作的
- SampleConsensusPrerejective(ext.RANSAC)是如何真正工作的
- 不确定要在我的main中放入什么才能使我的代码正常工作
- 为什么std::condition_variable notify_all的工作速度比notify_one快(对于随机请
- <<操作员在下面的行中工作
- 有人能解释一下为什么下界是这样工作的吗C++的
- ExtractIconEx:可以工作,但偶尔会崩溃
- C++中的memset函数工作不正常
- 当我在第一个循环中使用"auto"时,它工作正常,但是使用"int"它会给出错误,为什么?
- 链表c++插入,所有情况都已检查,但没有任何工作
- 当 int 方法工作正常时,void 方法有何不同,或者为什么我不能调用 void 方法?