Wie kann ich eine Datei in eine Array laden und wieder zurück speichern?
-
Hallo!
Wie kann ich z.B. die ersten 10MB einer Datei in einen Array aus unsigned char laden? Wie kann ich den Array dann wieder in einer Datei speichern?
Viele Grüße
pmw
-
ifstream::read bzw. ifstream::readsome
und
ofstream::write
-
Hi!
Danke für die Antwort. Leider bringt sie mich aber nicht weiter, da ich nicht weiß was ich jetzt machen soll.
Viele Grüße
pmw
-
Hallo,
was hast du denn jetzt bisher? Oder weisst du überhaupt nicht, wie man ifstream und sowas benutzt? Es gibt hier viele Beispiel, in denen aus Dateien gelesen bzw. in Dateien geschrieben wird.
Z.B.:
http://www.c-plusplus.net/forum/viewtopic.php?t=39469Vielleicht hilfts dir ja weiter.
-
Hallo!
Ich habe ein Programm geschreiben das Dateien nach RLE und LZ77 komprimieren kann. Aber bisher ist es sehr langsam, dass liegt daran, dass die Dateien nicht den Speicher geladen werden.
unsigned char[10*1024*1024]; /* = 10MB */ fstream FDatei; FDatei.open("c:\data.bin", ios::in); ADatei = FDatei von 0 bis 10*1024*1024 - 1; /* Lade die ersten 10MB */ FDatei.close();
unsigned char *ADatei; fstream FDatei; FDatei.open("c:\data.bin", ios::out); FDatei = ADatei; /* Datei speichern */ FDatei.close();
Wie lautet für folgende Dinge der C++ Code?
ADatei = FDatei von 0 bis 10*1024*1024 - 1; FDatei = ADatei;
Ich hoffe, so ist verständlicher, was ich meine.
Viele Grüße
pmw
-
Hallo!
Am Anfang habe ich so schnell Antworten bekommen. Jetzt, wo ich versucht habe mein Anliegen klarer zu formulieren, gab es irgendwie keine Antworten mehr. Ist meine Frage nicht verständlich oder bin ich einfach nur zu ungeduldig?
Ich habe folgenden ausprobiert, was leider nicht funktioniert:
#include <iostream> #include <fstream> using namespace std; int main(int argc, char *argv[]) { unsigned long long ILaenge; char *SQuelleDateiname; unsigned char *AQuelle; fstream FDatei; SQuelleDateiname = argv[1]; FDatei.open(SQuelleDateiname, ios::in); if (FDatei.is_open() == 0) { cout << "Fehler: Konnte Quelledatei nicht öffnen.\n"; system("PAUSE"); exit(0); } else { FDatei.seekg(0, ios::end); ILaenge = FDatei.tellg(); AQuelle = new unsigned char[ILaenge]; FDatei.seekg(0, ios::beg); FDatei.read((char*)AQuelle, ILaenge); cout << "<" << AQuelle << ">\n"; delete [] AQuelle; } FDatei.close(); system("PAUSE"); return 0; }
Inhalt Testdatei: 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ Ausgabe: <0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ=P >
Viele Grüße
pmw
-
Nimm halt internen Buffer
void convert(const char *in_fname, const char *ou_fname) { // create two filebuffers and set buffersize to 1 Meg ifstream in; char ibuf[1 * 1024 * 1024]; in.rdbuf()->pubsetbuf(ibuf, sizeof ibuf); ofstream ou; char obuf[1 * 1024 * 1024]; ou.rdbuf()->pubsetbuf(obuf, sizeof obuf); // open files in.open(in_fname, ios::binary); if (!in.good()) { cerr << "error opening file" << endl; return; } if (!ou.good()) { cerr << "error opening file" << endl; } // read -> convert (if necessary) -> write while (in.good()) { char c; in.get(c); if (c != '\n') ou.put(c); else { ou.put('\r'); ou.put('\n'); } } }
mfg