Hallo,
Zitat von
ghost007:
Das problem ist wohl eher darin begründet, dass ich den code nichtmal verstehe
EDIT: hab das ganze mal so kommentiert wie ich denke, dass es abläuft ... bitte um korrektur
Delphi-Quellcode:
procedure TForm1.CopyEx(
const FileName, NewFile:
string);
var
iFileHandleIn,iFileLength,iBytesRead:integer;
buffer:pointer;
iFileHandleOut,sizeofbuffer:integer;
begin
//holt sich das handle zum file
iFileHandleIn := FileOpen(filename, fmShareDenyNone);
//holt sich den pointer auf das ende des files
iFileLength := FileSeek(iFileHandleIn,0,2);
//setzt den pointer wieder auf den anfang des files
FileSeek(iFileHandleIn,0,0);
//reserviert speicher mit der größe des files
Buffer := PChar(AllocMem(iFileLength + 1));
//schreibt den inhalt der datei vom anfang bis zum pointer auf das ende in den buffer
iBytesRead := FileRead(iFileHandleIn, Buffer^, iFileLength);
//schliesst das file
FileClose(iFileHandleIn);
//erstellt ein neues file
iFileHandleOut := FileCreate(NewFile);
//schreibt den inhalt des buffers in das neue file
FileWrite(iFileHandleOut,Buffer,SizeOfBuffer);
//schliesst das neue file
FileClose(iFileHandleOut);
end;
ich vermute, dass der Fehler hier liegt:
Delphi-Quellcode:
//schreibt den inhalt des buffers in das neue file
FileWrite(iFileHandleOut,Buffer,SizeOfBuffer);
müsste eher heißen:
Delphi-Quellcode:
//schreibt den inhalt des buffers in das neue file
FileWrite(iFileHandleOut,Buffer,iBytesRead);
SizeOfBuffer ist als Integer deklariert, bekommt aber keinen Wert zugewiesen und ist damit zufällig 0 und genausso groß ist auch die Datei. Mit iBytesRead sollten genauso viele Bytes geschrieben werden, wie vorher gelesen wurden.
Ansonsten schau mal unter
http://www.delphicorner.f9.co.uk/articles/misc4.htm und dort unter
Quick and Dirty Copying, da ist ein Beispiel, dass sicherlich besser ist als meines.