Einzelnen Beitrag anzeigen

Benutzerbild von Kurt56
Kurt56

Registriert seit: 6. Apr 2005
Ort: Wedemark
47 Beiträge
 
Delphi XE8 Professional
 
#13

Re: Datei kopieren (datei wird verwendet)

  Alt 10. Okt 2008, 10:13
Zitat von DeddyH:
Ich habe die Prozedur mal "aufgebohrt".
Delphi-Quellcode:
procedure TForm1.CopyEx(const FileName, NewFile: string);
var
  iFileHandleIn,iFileLength,iBytesRead,iBytesWritten:integer;
  buffer:pointer;
  iFileHandleOut,sizeofbuffer:integer;
begin
  //holt sich das handle zum file
  iFileHandleIn := FileOpen(filename, fmShareDenyNone);
  if iFileHandleIn > -1 then
    begin
      //holt sich den pointer auf das ende des files
      iFileLength := FileSeek(iFileHandleIn,0,2);
      if iFileLength > -1 then
        begin
          //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));
          sizeofbuffer:=iFileLength; //<<<--- die Bufferlänge gesetzt, fehlte noch

          if Assigned(Buffer) then
            begin
              //schreibt den inhalt der datei vom anfang bis zum pointer auf das ende in den buffer
              iBytesRead := FileRead(iFileHandleIn, Buffer^, iFileLength);
              //erstellt ein neues file
              iFileHandleOut := FileCreate(NewFile);
              if iFileHandleOut > -1 then
                begin
                  //schreibt den inhalt des buffers in das neue file
                  iBytesWritten := FileWrite(iFileHandleOut,Buffer^,SizeOfBuffer); //<<<---- das ^ bei Buffer eingefügt
// ----------
                  if iBytesWritten = -1 then
                    ShowMessage('Fehler bei FileWrite');
                  //schliesst das neue file
                  FileClose(iFileHandleOut);
                end
              else
                ShowMessage('Fehler bei CreateFile');
            end
          else
            ShowMessage('Buffer nicht zugewiesen');
        end
      else
        ShowMessage('Fehler bei FileSeek');
      //schliesst das file
      FileClose(iFileHandleIn);
    end
  else
    ShowMessage('Fehler bei Fileopen');
end;
Wenn ich nichts übersehen habe, solltest Du dem Fehler nun auf die Spur kommen können.
Zwei Kleinigkeiten hab ich noch geändert.
Damit geht es.
Kurt
Für die kleinen Fehler haben wir Computer,
die großen Fehler machen wir selber.
  Mit Zitat antworten Zitat