2016-10-11 4 views
0

私は答えのstackoverflowを検索しますが、近い一致を得ることはできません。私はドライブの内容をシリアライズしています。私は操作のためにboost :: filesystem :: pathを使用しています。 Windows OSにパス情報を保存するには、最大(300はちょうど公称値)の文字長が必要です。フォルダーのパスのシリアル化の最大文字長

struct raw_event 
{ 
    friend std::ifstream& operator >> (std::ifstream& infile, raw_event& raw); 
    friend std::ofstream& operator << (std::ofstream& outfile, raw_event& raw); 
private: 

     char path_[300]; 
     // 
}; 
+0

対象のオペレーティングシステムは何ですか?なぜ 'std :: string'を使わないのでしょうか? – user4581301

+0

@ user4581301:Windows OS。私はstd :: stringを使用していますが、シリアライズではPODを使用してゴミを避けることを好みます – ark1974

+0

Unicode APIを使用していない限り、Windowsの最大パスは260です。それから32767です。Boostが何を使用しているのかは分かりませんが、常に32kを割り当てることは私にとっては馬鹿だと思われます。 – user4581301

答えて

2

ユニコードAPIを使用していない限り、Windowsの最大パスは260です。それでは32767です。Source MSDN Boostが何を使用しているか分かりませんが、確かに32kを保存する必要はありません。軌道からのサイトを核付ける時間があります。これはその1つではありません。

可変長の文字列を作成するには、通常はパスカルスタイルにして文字列の長さをファイルに書き込んだ後に文字列を書きますが、これはバイナリファイル用です。質問にoperator<<のようにテキストファイルの場合は、引用符とstd::getlineのような区切り記号を使用する方がよいでしょう。

関連する問題