![]() |
Über Laufwerke verschieben - MoveFileEx geht nicht?
Hallo.
Ich habe heute die Win32 Hilfe angeschaut und bin über folgenden Hinweis bei der API-Funktion MoveFile() gestoßen: Zitat:
Ich habe zuerst einmal eine MyMoveFile() Funktion entworfen, die zuerst CopyFile() und dann eine eigene RemoveDirectoryRecursive() aufruft. Das Problem: CopyFile() will nur Dateien. Dann habe ich die einfachere Variante MoveFileEx() gefunden. Mithilfe von MOVEFILE_COPY_ALLOWED soll auch das Verschieben über Laufwerke hinweg funktionieren, in dem Copy + Delete durchgeführt wird. Mein Code ist nun:
Delphi-Quellcode:
Das Problem: In Windows ME funktioniert es entgegen meiner Erwartung nicht. (Bitte jetzt keine Diskussion, ob es sinnvoll ist, ein 9 Jahre altes OS zu verwenden... Da ich eine bodenständige Konsolenanwendung schreibe, möchte ich bis 95 kompatibel bleiben.)
if not MoveFileEx('A:\test2\', 'C:\test2\', MOVEFILE_COPY_ALLOWED) then
begin RaiseLastOSError; end; Ich erhalte den OS-Error 120: "Die Funktion wird von diesem System nicht unterstützt." (ERROR_CALL_NOT_IMPLEMENTED). Wieso das?? In der Win32 API Reference wird nichts darüber geschrieben, dass MoveFileEx() in Windows 9x/ME nicht funktionieren soll! Ganz im Gegenteil - es werden sogar die Windows 95 Kompatibilitätsgrenzen bei MoveFileEx dokumentiert. Es steht beispielsweise dort, dass z.B. Reboot-Verschiebungen nur mit NT funktionieren. Alles Andere sollte laut Anleitung mit 9x/ME funktionieren. Was soll ich jetzt tun, damit ich ein Verzeichnis über Laufwerke hinweg verschieben kann und was soll der Code 120 hier bedeuten? Gruß blackdrake |
Re: Über Laufwerke verschieben - MoveFileEx geht nicht?
Ich habe dafür immer SHFileOperation verwendet, damit ging das auch unter Windows 95 problemlos:
![]() MoveFileEx müsste ich einmal testen, virtuell habe ich alle Systeme von 95 bis XP noch da, vielleicht sehe ich ja etwas. // EDIT: MoveFileEx ist unter Windows 95, 98 und ME nicht verfügbar, erst unter Windows NT. MS hat ja die Dokumentation zu Windows 9x herausgenommen, aber in der älteren Version stand: Zitat:
|
Re: Über Laufwerke verschieben - MoveFileEx geht nicht?
Zitat:
http://msdn.microsoft.com/en-us/library/aa365240(VS.85).aspx Zitat:
|
Re: Über Laufwerke verschieben - MoveFileEx geht nicht?
Richtig, allerdings steht das nicht mehr überall korrekt dabei, teilweise gab es die Funktionen doch schon früher, aber die Doku wird wohl (verständlicherweise) für Windows 9x nicht mehr richtig gepflegt.
Nebenbei kannst du das "(VS.85)" einfach aus der URL löschen, dann funktioniert der Link. |
Re: Über Laufwerke verschieben - MoveFileEx geht nicht?
OK, das dürfte es erklären. Ich versuche dann mal die alternative Möglichkeit.
Seltsam, in der Delphi 7 Win32-Hilfe war überhaupt nichts über die Verfügbarkeit von MoveFileEx beschrieben. Es wurde ja wie gesagt sogar beschrieben, was ausschließlich unter NT funktioniert (z.B. das Reboot-Zeug). Dann muss man doch davon ausgehen, dass wenn es NT-Exklusive-Flags gibt, der Rest unter 9x funktionieren muss. Sehr seltsam geschrieben... |
Re: Über Laufwerke verschieben - MoveFileEx geht nicht?
Die mitgelieferte Hilfe ist höchstens ein Anhaltspunkt, die richtige MSDN Doku ist das entscheidende.
|
Re: Über Laufwerke verschieben - MoveFileEx geht nicht?
Mh... irgendwie sind die Requirements Informationen in der MSDN seltsam - sie scheinen sich irgendwie nach dem Produktlebenszyklus zu orientieren und entsprechen damit nicht der ganzen Wahrheit.
Ich habe mir einfach mal MoveFile angeschaut und dort steht: Zitat:
|
Re: Über Laufwerke verschieben - MoveFileEx geht nicht?
Richtig, wie ich sagte:
Zitat:
Es gibt zu Visual Studio ja auch die MSDN Dokumentation, da steht das auch noch für Win9x korrekt drin glaube ich, müsste ich mal schauen, wie das war. |
Re: Über Laufwerke verschieben - MoveFileEx geht nicht?
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:52 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