2012-05-22 42 views
1

我期待在每次重新啓動我的程序期間使我的數據可用。我很好奇這是存儲文件的最佳方式,而不是回讀程序。我一直在閱讀互聯網上的一些東西,最大的問題是XML或二進制格式?我仍然在學習C++,我不掌握它。該程序的對象類型爲stringintint ...您使用哪種方法重新使用,爲什麼?將類對象的C++向量寫入文件返回程序

還有一件事是否有人知道這個to binaryto XML的好教程?

對不起缺少代碼部分,但我想知道一些比我更高級的程序員的意見。 :P

+1

你在說什麼是「對象持久性」。搜索這些條款,你可能會發現一些有用的東西。但一般來說,業界傾向於使用XML,JSON或YAML等非二進制格式,因爲它們可以進行編輯,而且它們沒有平臺二進制依賴性,例如「int」大小或字節順序。 –

回答

3

已經討論除了Matthais評論:

我覺得最明顯的格式是正確的,你的情況,那就是純文本。

只需以純文本格式(通常由空格分隔)序列化您的數據。 PT的好處在於它是人類可讀的,人爲可修改的,易於使用流處理(>>標記化或增強標記器)並且靈活且比XML輕得多。

例如,您可能希望存儲

struct { 
    std::string name; 
    int age; 
    double height; 
}; 

你,你會這樣寫:

John 21 5.4 
Bill 31 4.9 

或任何有你。這始終是無限便捷,例如名稱可以包含兩個詞如此:

John Smith 

而且tokeniser將劈在空間和嘗試,並解析史密斯爲int,但是這是一個簡單的問題,用分隔符來解決。例如「」

+0

你可以告訴我C++中的函數/庫嗎? –

+0

Boost.Tokenizer。 HTTP://www.boost。org/doc/libs/1_49_0/libs/tokenizer/index.html – 111111

+0

純文本的缺點是1)必須編寫解析器,2)稍後難以擴展,3)錯誤恢復更困難。 –

3

我不同意。有很多選項可用。另外兩個我在這裏命名爲: 1)您可能會看到一個名爲json的文件格式,它有一個自己的網站(我們有些人不這樣做)。它聲稱是一種輕量級的數據交換格式。 2)有一種稱爲csv的文件格式。它的使用對計算器here

+1

如果「我想在Excel中編輯此文件或其他文件」是唯一使用CSV的重要功能。 –

2

即使您的進程過早死亡(例如由於斷電,硬件故障或代碼本身內的嚴重錯誤),您是否仍需要強健的行爲?

如果是這樣,請考慮「嵌入」數據庫,如SQLite或MS SQL Server Compact(等)。這些系統的交易性質應確保您不會因損壞的數據而導致數據丟失,從而導致您的程序無法正常啓動。另外,某些文件系統支持事務(例如Windows Vista或更高版本中的事務性NTFS)。

+0

這看起來令人滿意,但複雜度比我預期的要高一些。我在Python中使用了Json。我不知道它是爲C++還謝謝你通知我。 :) –

+0

我想說的是,「我需要處理的數據遠遠多於合理安裝在內存中的數據,並且需要進行大量的交叉引用」是使用數據庫比「穩健性」更好的理由。 –

+0

@MikeDeSimone所有這些都是一般的正當理由,但這個問題的措辭表明,在這種特殊情況下,「交叉引用」的大小和需要都不成問題。我也提到了交易文件系統。 –