komplette Datei -> Char-Array
-
ich will einfach nur den gesamten Inhalt einer Datei in einem Char-Array speichern
aber egal wie ichs probier, es ist immer der Wurm drinich habs mal so probiert:
ifstream in(argv[2], ios::binary | ios::in); char buffer2[1]; char buffer3[1]; int size = 0; while(true) { buffer3 = buffer2; buffer2[size+1]; buffer2 = buffer3; in.read(buffer3, 1); if(in.eof())break; buffer2[size] = buffer3[0]; size++; } in.close(); printf("Inhalt der Datei %s:\n\n", argv[2]); printf(buffer2);aber komischwerweiße funktioniert das nur bei manchen Dateien
bei den anderen fehlt das Ende, aber ich hab nicht die geringste Ahnung warumgibts vielleicht irgendeine viel einfachere Lösung für mein Problem?
überall nur Funktionen die ein Zeichen oder eine Zeile lesen
-
char buffer2[1]; char buffer3[1];Was soll das? Du vergrößerst ein Array nicht dadurch, dass du einfach den Index vergrößerst. Du bewegst dich quasi in einem Minenfeld (in diesem Fall Speicher, der nicht dir gehört). Außerdem ist Arrayzuweisung doch eigentlich gar nicht definiert?! Wie wärs, wenn du einfach den ganzen Quatsch in einen std::string einliest, dann bekommst du mit c_str () was du willst (wofür auch immer).
-
Nick H. schrieb:
ich will einfach nur den gesamten Inhalt einer Datei in einem Char-Array speichern
aber egal wie ichs probier, es ist immer der Wurm drin ..
gibts vielleicht irgendeine viel einfachere Lösung für mein Problem?Hallo Nick,
Ja - in C++ ist vieles ganz einfach, wenn man sich ein wenig mit der STL auskennt. Nutze statt eines Char-Arrays einfach den std::string. Dann könnte es so aussehen:
#include <algorithm> // copy #include <iostream> #include <fstream> #include <iterator> // istreambuf_iterator; back_inserter #include <string> int main( int argc, char* argv[] ) { using namespace std; if( argc < 3 ) return -1; // Parameter ncht angegeben string buffer; ifstream in( argv[2] ); copy( istreambuf_iterator< char >( in ), istreambuf_iterator< char >(), back_inserter( buffer ) ); // alle Zeichen aus der Datei stehen in 'buffer' return 0; }(Bem.: in der native STL von MS VC 6 ist kein string.push_back implementiert, dort übersetzt dieser Code nicht)
Gruß
Werner
-
danke ich werds mal so probieren
benutze eh Dev-C++edit:
funkt nich
erstmal findet er istreambuf_iterator nicht
ich habs einfach mal durch istream_iterator ersetzt
aber dann hagelt es fehlermeldungenes muss doch irgendwo eine ganz einfache Möglichkeit geben
aber ich such schon ewig bei Google...edit:
so jetzt funktionierts schon fast: std::string line; std::string file; std::ifstream ifs(argv[2]); while(std::getline(ifs,line)) { file += line; } ifs.close();nur sind alle meine Absätze weg

ich brauch aber jedes zeichen das in der Datei steht
wie kann ich das erreichen?
-
Wenn du es wirklich mit einem char-Array machen willst, geht das z.B. so:
#include <iostream> #include <fstream> int main() { std::ifstream fin("file", std::ios::in|std::ios::binary); std::ios::pos_type start = fin.tellg(); fin.seekg(0, std::ios::end); std::ios::pos_type end = fin.tellg(); fin.seekg(0, std::ios::beg); const int SIZE = end - start; char* fcontent = new char[SIZE+1]; fin.read(fcontent, SIZE); fcontent[SIZE] = '\0'; // mach was... delete[] fcontent; return 0; }
-
Nick H. schrieb:
funkt nich
erstmal findet er istreambuf_iterator nicht
ich habs einfach mal durch istream_iterator ersetzt
aber dann hagelt es fehlermeldungenes muss doch irgendwo eine ganz einfache Möglichkeit geben
Hallo Nick,
es gibt mehr als einen einfachen Weg. Versuch' mal das:
#include <iostream> #include <fstream> #include <string> #include <sstream> int main( int argc, char* argv[] ) { using namespace std; if( argc < 3 ) return -1; // Parameter nicht angegeben stringstream strm; ifstream in( argv[2] ); strm << in.rdbuf(); string buffer = strm.str(); // alle Zeichen aus der Datei stehen in 'buffer' return 0; }Gruß
Werner