簡體   English   中英

在C ++中將時間保存/寫入txt文件

[英]saving/writing time to txt file in C++

我想將時間保存到現有的txt文件中,以便可以知道何時添加此特定記錄。.我有這段代碼可以自動檢測時間

time_t Now1;
struct tm * timeinfo;
char time1[20];
time(&Now1);
timeinfo = localtime(&Now1);
strftime(time1, 20, "%d/%m/%Y %H:%M", timeinfo);
Passports.Record_Added_On = time1;
cout << "\n\nRecord Added On: " << Passports.Record_Added_On;

讀取txt文件的代碼:

fs = new fstream(Passports_FILE_NAME, ios::in | ios::out | ios::binary);
            if (!fs)
            {
                cout << "\n Can't open or create '" << Passports_FILE_NAME << "' file" << "\n";
                system("pause");
                break;
            }
            recs_num = -1;
            while (fs->read((char *)&Passports, sizeof(Passports)))
            {
                recs_num++;
                if (Passports.ID == id && !Passports.Deleted)
                break;
            }
            if (fs->eof()) //if (the record is not in the file || it's there but it's Deleted)
            {
                cout << "\nThe specific passports record does not exists in the file.";
                closeFile(fs);
                cout << "\n\nExit\n";
                return 0;
            }

即使我顯示它,它也可以正常工作。但是,當我關閉程序並再次打開它時,它卻顯示出這種奇怪的字符,有時甚至崩潰了。有人可以幫助我,解釋其背后的原因是什么?

在此處輸入圖片說明

您不能從內存中初始化非POD對象(如std :: string class)。 這會導致崩潰,因為類不知道它是否已初始化。 無法保證所有此類成員均已從此代碼正確初始化。 假設有一個類成員,該成員指向一些為您的數據分配的內存。 您將其保存到文件中,然后再次運行您的應用程序以加載它。 然后,指針將獲得相同的數值,但沒有更多的內存指向他。 調用OS函數后,必須由OS分配內存,在本例中未調用該內存。 因此,下次您嘗試使用此初始化不佳的類對象時,它會崩潰,因為它嘗試使用不屬於您的應用程序的內存。 要解決此崩潰,您應該正確解析文件內容,然后相應地填寫您的Passports記錄。 例如:

int int_value;
std::string string_value;
fs >> int_value >> string_value;

之后,您可以初始化您的對象:

Passports.ID = int_value;
Passports.Name = string_value;

等。您應該使用相同的方式將數據保存到文件中(這稱為序列化,我建議您在該主題中搜索更多內容)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM