Einzelnen Beitrag anzeigen

nahpets
(Gast)

n/a Beiträge
 
#8

Re: Datei kopieren (datei wird verwendet)

  Alt 8. Okt 2008, 08:17
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.
  Mit Zitat antworten Zitat