Moin.
Wie der Titel schon sagt, soll eine .exe eine Kopie von sich selbst erstellen. Das ist mein Lösungsansatz:
Delphi-Quellcode:
//--- Datei öffnen und einlesen
FileHandle := FileOpen(Application.ExeName, fmShareDenyNone);
FileLength := FileSeek(FileHandle,0,2);
FileSeek(FileHandle,0,0);
Buffer := PChar(AllocMem(FileLength + 1));
BytesRead := FileRead(FileHandle, Buffer^, FileLength);
FileClose(FileHandle);
//--- Neue Datei schreiben
FileHandle := FileCreate(ExtractFilePath(Application.ExeName) + '\Copy.exe', fmCreate);
BytesWritten := FileWrite(FileHandle, Buffer, FileLength);
FileClose(FileHandle);
Es wird zwar eine Datei erstellt, aber diese ist 0 Byte groß.
Wenn ich mir den Inhalt meiner lokalen Variablen anschauen, sehe ich, dass FileWrite schief geht:
Code:
Name des Ausdrucks Wert
BytesRead 5762995
FileLength 5762995
BytesWritten -1
Die Frage ist nur warum?