![]() |
Datei kopieren (datei wird verwendet)
Kann man irgendwie eine datei, die gerade von einem anderen programm verwendet wird kopieren?
MfG - Ghost007 |
Re: Datei kopieren (datei wird verwendet)
Hallo,
ja :wink: Was hast Du vor, willst Du selber kopieren oder per Batch oder per Explorer oder... Meinst Du eventuell sowas?
Delphi-Quellcode:
Damit lassen sich zumindest Dateien zum Lesen öffenen, in die der IIS gerade seine Protokolle schreibt, naja und lesen dürfte ja zum Kopieren reichen.
iFileHandle := FileOpen('dateiname', fmShareDenyNone);
|
Re: Datei kopieren (datei wird verwendet)
hey,
ich will damit eine datei kopieren, eigentlich über das delphi interne CopyFile. Mal eine blöde frage :shock: wie kann ich dann über den filehandle die datei kopieren ? evtl auch mit tfilestream >.< MfG - Ghost007 |
Re: Datei kopieren (datei wird verwendet)
Hallo,
Delphi-Quellcode:
Jetzt ist die Datei in Buffer, und den dann mit FileWrite in eine andere Datei schreiben.
iFileHandleIn := FileOpen(opendialog1.Files[l], fmShareDenyNone);
iFileLength := FileSeek(iFileHandleIn,0,2); FileSeek(iFileHandleIn,0,0); Buffer := PChar(AllocMem(iFileLength + 1)); iBytesRead := FileRead(iFileHandleIn, Buffer^, iFileLength); FileClose(iFileHandle);
Delphi-Quellcode:
Das ist jetzt nur so "hingedaddelt", sollte aber vom Prinzip funktionieren. Wenn die Datei was größer ist, musst Du sie stückweise in Buffer lesen und dann schreiben.
iFileHandleOut := FileCreate(SaveDialog1.FileName);
FileWrite(iFileHandleOut,Buffer,SizeOfBuffer)); FileClose(iFileHandleOut); |
Re: Datei kopieren (datei wird verwendet)
hm,
ich versuch gerade den fehler zu lokalisieren ... aber irgendwie erstelt er die dateien zwar alle, aber die haben 0KB und sind leer :D EDIT: hab mir folgende procedure draus gebastelt ...
Delphi-Quellcode:
procedure CopyEx(const FileName, NewFile: string);
var iFileHandleIn,iFileLength,iBytesRead:integer; buffer:pointer; iFileHandleOut,sizeofbuffer:integer; begin iFileHandleIn := FileOpen(filename, fmShareDenyNone); iFileLength := FileSeek(iFileHandleIn,0,2); FileSeek(iFileHandleIn,0,0); Buffer := PChar(AllocMem(iFileLength + 1)); iBytesRead := FileRead(iFileHandleIn, Buffer^, iFileLength); FileClose(iFileHandleIn); iFileHandleOut := FileCreate(NewFile); FileWrite(iFileHandleOut,Buffer,SizeOfBuffer); FileClose(iFileHandleOut); end; |
Re: Datei kopieren (datei wird verwendet)
Etwas Fehlerbehandlung im Code hilft auch bei der Fehlersuche.
|
Re: Datei kopieren (datei wird verwendet)
Zitat:
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; |
Re: Datei kopieren (datei wird verwendet)
Hallo,
Zitat:
Delphi-Quellcode:
müsste eher heißen:
//schreibt den inhalt des buffers in das neue file
FileWrite(iFileHandleOut,Buffer,SizeOfBuffer);
Delphi-Quellcode:
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.
//schreibt den inhalt des buffers in das neue file
FileWrite(iFileHandleOut,Buffer,iBytesRead); Ansonsten schau mal unter ![]() |
Re: Datei kopieren (datei wird verwendet)
Es stellt sich aber grundasätzlich die Frage, ob es sinnvoll ist, eine Datei zu kopieren, die gerade in Benutzung eines anderen Programms ist. Das macht m.E. nur Sinn, wenn sichergestellt ist, dass die andere Anwendung nur lesenden Zugriff hat. Ist das in deinem speziellen Fall so?
|
Re: Datei kopieren (datei wird verwendet)
Hallo Ralf,
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:19 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz