Datei "splitten", mit welcher Funktion??
-
hallo leute,
ich versuche gerade ein Splitprogramm zu schreiben. Es soll alle Dateien (.exe, Text, Multimedia, etc.) in einzelne Teile aufteilen können. Mein erstes Problem: welche Funktion benötige ich dafür? Bisher hab ich sowas nur mit Textdateien gemacht aber wie kann ich eine beliebige Datei öffnen und binär auslesen? Wie kann ich verhindern dass beim Zusammenfügen Teile von unterschiedlichen Ausgangsdatein zu einer verschmolzen werden? bisher hab ich eine Struktur (beinhaltet v.a. den Namen der Ausgangsdatei, die Gesamtanzahl der Teile und die Nummer des Teils). Diese struktur wird zuerst in die Teildateien geschrieben. Ist das so in Ordnung oder hat jemand einen besseren Vorschlag?
-
hallo?
weiss denn keiner rat?
-
Binär bearbeiten kannst du die Datei, indem du sie im Modus "rb" öffnest. Anschließend kannst du die Daten per fread() blockweise lesen und per fwrite() wieder schreiben.
Wie du die sicherstellst, daß die Teilstücke richtig zusammengesetzt werden, mußt du allerdings schon selber herausfinden - so ein Header mit Name und Ordnungsnummer wäre da schon ein guter Anfang. Eventuell solltest du noch eine Check-Summe über den gesamten Dateiinhalt bilden und am Ende des letzten Teilstücks anhängen.
-
@ CStoll: Ok, Vielen Dank! ich werds gleich mal ausprobieren...
-
das mit dem splitten sieht bisher ganz gut aus und jetzt habe ich versucht den header mit reinzuschreiben, was auch funtzt aber wenn ich ihn wieder auslesen will dann geht immer irgendwas schief. Die Grössen der einzelnen Strukturelemente sind bekannt und habs mal versucht mit fscanf, bzw. in einen buffer schreiben und dann mit sscanf die Struktur wieder auszulesen. normal sollte es so auch klappen, tuts aber nicht. Aber noch lieber wäre mir eine Art reinterpret_cast<header>() wie in C++. Ich wollts eigentlich komplett in C schreiben aber scanf ist mir etwas unsympathisch. gibst da nicht ne bessere lösung?
-
0000: 21 00 32 31 00 00 00 00-00 00 00 00 00 00 00 00 !°21°°°°°°°°°°°°
Hier ist die 16-Bit-Zahl 0x0021 und der String "21" gespeichert.
Die Zahl ist binär, der String ist Text.
Noch ein Tipp: Schau Dir das Ergebnis mit mal mit einem HexEditor an.
-
versteh ich jetzt nich so ganz. ich wollt nur die struktur einlesen. sie steht am anfang und hat diese form:
struct { int char[50] int int };
Offset ist also bekannt, aber wie kann ich die komplette Struktur in einem Rutsch einlesen?
-
fread
-
naja so bekomm ich dann die Daten in Binärform in den Buffer, aber soweit hab ichs schon
-
struct bla, blubb; ... fread (&blubb, sizeof(struct bla), 1, filepointer);
-
Klappt perfekt, Dankeschön