Problem mit Datei-Schreiben...
-
Hallo.
Ich habe ein Problem. Ich habe ein Programm geschrieben, dass alle Dateien in einem ordner zusammen packt zu eienr datei und auch infos über den ordner (name, etc..) enthält, sodass ich sozusagen den ordner in ne datei konvertieren kann.
Das Problem ist dass ich alle dateien ganz normal einlese und in einem
TCHAR buffer zwischenspeichere. Dann füge ich den datenpäckchen noch "[", "]" und paar sonderbefehle hinzu, die angeben wo eine Datei beginnt und wo die info über den oder die ordner ist. Dise Zeichen füge ich mit lstrcpy() und lstrcat() ein.Nun aber gibt es Probleme. Alle Dateien ausser textdateien werden dabei zerstört.
Wie mach ich das ganze nun binär????
Mit freundlichem Gruß Stefan.
-
Auf keinen Fall mit lstrcpy und lstrcat!
Binäre Dateien können (anders als reine text-dateien) auch mittendrin binäre 0 enthalten. lstrcpy/lstrcat hören dann an der Stelle auf (für sie endet der String ja).
Du müßtest alle Dateien byteweise durchgehen und byteweise in deinen einzelnen Buffer schreiben.
-
achsoo.. an das hatte ich nie gedacht.
thx.
-
Hepi schrieb:
Du müßtest alle Dateien byteweise durchgehen und byteweise in deinen einzelnen Buffer schreiben.
Dafür bietet sich memcpy an.
-
CopyMemory() is am besten.
-
Tolga schrieb:
CopyMemory() is am besten.
Was genau ist der Vorteil gegenüber memcpy?
-
der Funktionsname sieht zum Beispiel schöner aus.
-
aber er ist länger - man muss mehr tippen

-
Ein weiterer Vorteil ist dass memcpy im Grunde Copymemory kapselt, sodass ein direkter Aufruf von der WINAPI funktion schneller ist

-
@Tolga: Na, wenn Du dich da mal nicht irrst:
//winbase.h #define CopyMemory RtlCopyMemory //winnt.h #define RtlCopyMemory(Destination,Source,Length) memcpy((Destination),(Source),(Length))Weiss natürlich nicht, wie es bei Win98 ist, aber unter WinNT ist deine Aussage schlichtweg falsch

-
Eine Standard-C-Funktion soll eine Windows-Funktion kaspeln?
Auch nicht schlecht...
-
Hepi schrieb:
Eine Standard-C-Funktion soll eine Windows-Funktion kaspeln?
Auch nicht schlecht...
Das ist ziemlich normal.
-
Umgekehrt, mein Lieber...
Windows-Funktionen rufen intern C-Standard-Funktionen auf, nicht umgekehrt, wie Tolga uns Glauben machen will!
-
Um mal ein Beispiel zu nennen: printf kapselt ja wohl WriteConsole
-
Ach so, unter Linux kann ich also kein printf nutzen?
Ulkig... ich dachte das ginge...
-
Unter Linux wird natürlich eine andere Funktion von printf intern verwendet.
-
Hepi schrieb:
Ach so, unter Linux kann ich also kein printf nutzen?
Ulkig... ich dachte das ginge...
Was Hepi uns so alles klar machen will...
ulkig. Aber zumindest ist er einsichtig.