Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Dateien kopieren - Test ob vorhanden, bzw. in Gebrauch (https://www.delphipraxis.net/95268-dateien-kopieren-test-ob-vorhanden-bzw-gebrauch.html)

hgiel 4. Jul 2007 11:39


Dateien kopieren - Test ob vorhanden, bzw. in Gebrauch
 
Hallo,

ich habe folgendes Problem:

Ich lese in eine Listbox Dateinamen inkl. Verzeichnis ein und möchte diese Einträge "später" als Basis für einen Kopiervorgang nutzen:

for i:=1 to listbox1.count do
begin
// COD-Datei - gemäß Auswahl - einlesen
// Kopieren der ausgewählten Datei ins TEMP-Verzeichnis
FilePathA := listbox1.items.strings[i-1]; // Pfad der zu kopierenden Datei inkl. Dateiname!
FilePathB := temp_pfad+extractfilename(listbox1.items.strings[i-1]); // Zielpfad inkl Dateiname!

if DirectoryExists(ExtractFileDir(FilePathB)) and not IsFileInUse(FilePathA) then
begin
mem := TMemoryStream.Create;
try
mem.LoadFromFile(filepathA);
mem.SaveToFile(filepathB);
finally
mem.Free;
end;
end;

if fileexists(FilePathB) then // Zieldatei erfolgreich ins TEMP-Verzeichnis kopiert und für Auswertung bereit?
begin
...


Es treten E/A Fehlermeldungen auf bzw. ein Fenster wird angezeigt mit dem Hinweis, dass die Datei nicht (zum kopieren?) geöffnet wurde, wenn das Verzeichnis zwischenzeitlich umbenannt/gelöscht oder die Datei gelöscht wurde!

Meine Frage wie und an welcher Stelle unterdrücke ich diese Hinweisfenster - das Programm soll einfach diese Datei/das Verzeichnis dann einfach NICHT berücksichtigen und mit der nächsten Datei/Verzeichnis fortfahren!

Gruß,

Heinz

scrat1979 4. Jul 2007 12:01

Re: Dateien kopieren - Test ob vorhanden, bzw. in Gebrauch
 
Hallo!

Das hängt von Deinem Kopiervorgang ab. Kopierst Du mittels FileStreams oder über BlockRead/Blockwrite?

1. Bei FileStreams schau Dir mal in der Hilfe den Try...Except-Block an.

Hier ein KLEINES Beispiel:
Delphi-Quellcode:
for i := 0 to listbox1.count-1 do BEgin;
try
quelldatei := TFileStream.Create(ListBox.Items[i], fmOpenRead or fmShareDenyNone);
zieldatei := TFileSttream.Create(Zielpfad+ListBox1.Items[i], fmCreate);
zieldatei.copyfrom(quelldatei, quelldatei.size);
except
 // hier z.B. Hinweis in eine Logdatei schreiben daß Fehler aufgetreten
end; {try..except}
end; {for}
Speicher freigeben (quelldatei.free; ...)habe ich mal weggelassen - aber vergiß das nicht :-)

Wenn Du den Fehler noch genauer lokalisieren möchtest dann müsstest Du IMHO entweder den Fehler im Except-Block näher auslesen oder den Try-Except-Block schachteln.


2. Bei Assign(f, ...) und anschließendem BlockRead (...) könnte Dir der Compilterschalter
{$I-} / {$I+} zusammen mit "if ioResult..." weiterhelfen. Ebenfalls in der Hilfe nachschauen

Hoffe Dir einen Anstoß gegeben zu haben...


// EDIT: Habe erst beim 2. mal hinschauen gesehen, daß Du tatsächlich Streams benutzt. Also ignoriere meine 2. Antwort einfach. Ich lasse sie vollständigkeitshalber aber mal stehen...

SCRaT

hgiel 4. Jul 2007 12:54

Re: Dateien kopieren - Test ob vorhanden, bzw. in Gebrauch
 
super vielen Dank - jetzt funktioniert es!

scrat1979 4. Jul 2007 16:07

Re: Dateien kopieren - Test ob vorhanden, bzw. in Gebrauch
 
:thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:11 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz