2016-10-11 1 views
0

Ich suche stackoverflow für die Antwort, kann aber keine enge Übereinstimmung erzielen. Ich serialisiere Inhalte eines Laufwerks. Ich verwende boost :: filesystem :: path für die Manipulation. Was sollte die maximale Zeichenlänge (300 ist nur nominal) sein, um die Pfadinformationen in Windows OS zu speichern.Maximale Zeichenlänge für die Serialisierung des Ordnerpfads

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

Welches Betriebssystem wird ins Visier genommen? Und warum nicht eine 'std :: string' verwenden? – user4581301

+0

@ user4581301: Windows-Betriebssystem. Ich verwende std :: string, aber für die Serialisierung verwenden Sie lieber POD, um Müll zu vermeiden – ark1974

+0

Der maximale Windows-Pfad ist 260, es sei denn, Sie verwenden die Unicode-API. Dann ist es 32767. Nicht sicher, was Boost benutzt, aber immer 32k zuzuweisen, scheint für mich wie eine Trottel-Wette zu sein. – user4581301

Antwort

2

Der maximale Windows-Pfad ist 260, es sei denn, Sie verwenden die Unicode-API. Dann ist es 32767. Source MSDN Nicht sicher, was Boost verwendet, aber Sie möchten 32k nicht immer nur speichern, um sicher zu sein. Es gibt Zeiten, um die Seite aus dem Orbit zu vernichten. Dies ist keiner von ihnen.

Um eine Zeichenfolge mit variabler Länge zu tun, gehe ich normalerweise Pascal Stil und schreibe die Länge der Zeichenfolge in die Datei und schreibe dann die Zeichenfolge, aber das ist für Binärdateien. Für eine Textdatei, wie von operator<< in der Frage vorgeschlagen, sind Sie besser mit einem Trennzeichen wie Anführungszeichen und std::getline.

Verwandte Themen