Ganze Textdatei auslesen Größe der Datei!=Anzahl der Zeichen, wenn Anzahl der Zeilen nicht 1??
-
Schwer das ganze in einen Titel zu fassen.
Also, erstmal hallo, ich lese eine ganze Textdatei ein.
Scheinbar fehlt am Ende dann allerdings das Terminatorzeichen, kein Problem füg ich es einfach hinzu. Allerdings muss das Terminatorzeichen scheinbar an die Stelle Dateigröße - Anzahl Zeilen, ich versteh nicht so ganz warum?
mein Code:std::string filePath = static_cast<std::string>(static_cast<bf::path>(*fileiter).native_file_string()); const char* ccfilePath = filePath.c_str(); //if anyone can tell me, why I need an extra filePath variable, DO IT! std::ifstream file(ccfilePath, std::ios::ate); int filesize = file.tellg(); if(filesize <= 0) filesize = 1; file.seekg(0); char* csource = new char[filesize + 1]; file.read(csource, filesize); csource[filesize] = '\0'; wxString source(csource); sources[fileList->GetItemText(fileNode)] = source; delete[] csource;Ein paar Variablen werden euch hier nichts sagen, aber wichtig sind vor allem die letzten Zeilen.
Äußern tut sich das so, dass am Ende des Textes bei einer Zeile kein Zeichen mehr steht, bei zwei Zeilen 1* Ì, bei drei Zeilen 2*Ì u.s.w. also der Datenmüll nimmt proportional zur Anzahl der Zeilen zu.
Warum??
-
Hmm sieht ja ekelig aus

const std::string file_path(static_cast<std::string>(static_cast<bf::path>(*fileiter).native_file_string())); std::ifstream file_stream(file_path.c_str(), std::ios_base::app); const std::streampos file_size(file_stream.tellg()); file_stream.seekg(0, std::ios_base::beg); char* file_content(new char[file_size + 1]()); file_stream.read(file_content, file_size * sizeof(char)); sources[fileList->GetItemText(fileNode)] = wxString(file_content); delete [] file_content;... so in etwa ...
-
Hmm sieht ja ekelig aus
danke :p
Dein Code funktioniert(nach gewissen Änderungen, std::streampos hat zu viele + überladungen, also int, und std::ios::ate muss schon sein), warum, was ist der Unterschied?
-
Okay, ich habs.
Gut zu wissen, dass die Klammern hinter new char[bla]() alles mit 0 initialisieren.
-
JustAnotherNoob schrieb:
Gut zu wissen, dass die Klammern hinter new char[bla]() alles mit 0 initialisieren.
Das gilt für alle POD Datentypen

Die werden by default nämlich überhaupt nicht initialisiert, wenn man möchte das sie initialisiert werden (und deren c'tor aufgerufen wird) muss man den c'tor explict aufrufen, was man bei der erstellung eines arrays eben mit den klammern nach der dimensions angabe bewerkstelligt