Einzelnen Beitrag anzeigen

Benmik

Registriert seit: 11. Apr 2009
542 Beiträge
 
Delphi 11 Alexandria
 
#14

AW: SHFileOperation: Wie Dateien mit sehr langem Dateinamen kopieren?

  Alt 22. Mär 2014, 00:42
Mit Freude habe ich HeikoAdams Code übernommen, da er mir sehr gut zupass kam.
Bei der Verwendung stellt sich dann aber heraus, dass er ein paar Fallstricke enthält.

So berücksichtigt der Code leider nicht den Fall, dass der Anwender (so wie ich) von sich aus bereits ein '\\?\' vor die Dateinamen setzt.
In einem solchen Fall enthalten sQuelle und sZiel nur leere Strings, aber leider liefert die Funktion trotzdem (!) eine 0 als Zeichen für eine korrekte Ausführung.

Und, wie schon bemerkt, darf man leider auch nicht einfach ein '\\?\' vor alle Dateinamen setzen. Bei Dateinamen >= MAX_PATH muss es stehen, bei kürzeren darf es nicht stehen. Das muss man nicht verstehen, vor allem nicht, da Microsoft schreibt:"SHFileOperation fails on any path prefixed with "\\?\"." Der zurückgegebene Fehlercode 124 hat nichts mit dem Windows-Fehlercode "Die Ebene des Systemaufrufs ist falsch" zu tun. Microsoft erklärt hier, dass es sich um "Prä-Windows-Fehlercodes" handelt. Der Code bedeutet "The path in the source or destination or both was invalid." An gleicher Stelle teiltMicrosoft zudem mit, dass man neben dem Rückgabewert auch fAnyOperationsAborted auswerten muss (" If you do not check fAnyOperationsAborted as well as the return value, you cannot know that the function accomplished the full task you asked of it and you might proceed under incorrect assumptions.")

Ich habe daher den Code etwas umgegraben. Für mich funktioniert er; das tat er bei HeikoAdams aber auch, warten wir also wieder drei Jahre.

PS: Ich ziehe den Code zurück, siehe Beitrag unten.

Geändert von Benmik (22. Mär 2014 um 19:23 Uhr)
  Mit Zitat antworten Zitat