![]() |
Kopiervorgang funktioniert nicht immer...
Hallo! 8)
Ich benutze folgende Struktur um ganze Verzeichnisse samt Dateien zu kopieren. Es funktioniert...nur so weit wenn ich von der Festplatte kopiere. Leider werden die Dateien (Verzeichnisse) vorwiegend von CD-ROM kopiert. Es geschieht ab und zu, dass ich folgende Fehlermeldung bekomme: Von dem Datenträger kann nicht gelesen werden obwohl die CD ok ist??? vielleicht kann man diese Funktion die ich verwende etwas besser gestalten... sonnst hat jemand vielleicht eine alternative Lösung für mich?
Delphi-Quellcode:
Gruß
function CopyFile( sSource,sDest : String ) : Boolean;
var aSI : TSHFileOpStruct; szSource, szTarget : array[0..251] of Char; sMsg : String; begin FillChar(szSource, SizeOf(szSource), #0 ); FillChar(szTarget, SizeOf(szTarget), #0 ); StrPCopy(szSource, sSource); StrPCopy(szTarget, sDest); Result := FALSE; try with aSI do begin Wnd := FrmMain.Handle; wFunc := FO_Copy; pFrom := szSource; pTo := szTarget; fFlags := FOF_MULTIDESTFILES; lpszProgressTitle := 'Kopieren'; end; SHFileOperation(aSI) except Result := False; end; end; Paul Jr. |
Moin Paul jr.,
hast Du auch berücksichtigt, dass eine Dateienliste mit zwei #00 abgeschlossen werden muss? Das ergibt sich aus Deiner Funktion nicht so ganz, da nicht ersichtlich ist, was genau als Parameter übergeben wird. [EDIT] Und wie ich gerade noch sehe, wird der Rückgabewert der Funktion immer auf false gesetzt. Soll das so? [/EDIT] |
Hi Christian 8)
natürlich das mit dem Result ist unwichtig (habe ich mich jetzt vertippt)... Wichtiger: ich schliesse es nur mit einem 0 ... also so #0. Ist das falsch? müssen da unbedingt zwei Nullen? Gruß Paul Jr. |
Die API Funktion erwartet eine StringListe, in welcher jeder String durch #0 beendet wird. Die StringListe wird durch eine weitere #0 beendet. Damit könnte man auch behaupten, dass der letzte String mit einer #0#0 beendet wird UND WERDEN MUSS.
|
Moin Paul jr.
FpFrom und FpTo beschreiben oft Listen von Strings (Pfade/Dateinamen). Da diese, C-Typisch, jeweils null terminiert sind, wird das Listenende durch eine doppelte 0 angezeigt, wie bei solchen Listen in C üblich. Sonst weiss die Funktion nicht, wo die Liste zu Ende ist. Deshalb ist es schlicht falsch nur eine #00 am Ende der Liste stehen zu haben. ;-) |
Danke für die Antworten 8)
... ok mache ich mit #00... aber ist das wirklich die Ursache für mein Problem gewesen? Hat jemand vielleicht irgendwelche alternative Routine die das Gleiche macht?... da von Festplatte ging die Kopiererei bislang ohne Fehler... nur von der CD habe ich ab und zu Probleme... Gruß Paul Jr. |
Bei Delphi 3000 habe ich mal einen Artikel zum Thema geschrieben. Wird endlich Zeit, dass ich den hier unterbringe. :roll:
![]() |
Hi Sakura 8)
irgendwie kann ich dort nichts finden... Gruß Paul Jr. |
Unter benanntem Link ist eine Funktion, welche die Shell Funktionen wrapt. Diese übernimmt TStringListen welche für die Quell- und Zieldateien bestimmt sind und wandelt diese in #0 separierte StringListen um.
|
Danke Sakura
Gruß Paul Jr. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:35 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