![](/img/trans.png)
[英]how to read data from different cells of Excel (csv) file in 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 *轉換為char * ,這是write方法所需的參數類型。 sizeof()只是一個函數,它獲取對象的大小(以字節為單位),如上所述, write()也是必需的。
他們只是逐字節地編寫內存結構,從對象在內存中開始的地方開始,然后逐個寫入對象的大小,就好像它只是一堆char
。
這不是有史以來最絕妙的主意,作者有時可能會遇到無法預料的麻煩。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.