Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Ordner verschieben mit TSHFileOpStruct... (https://www.delphipraxis.net/85347-ordner-verschieben-mit-tshfileopstruct.html)

bingo72 29. Jan 2007 16:44


Ordner verschieben mit TSHFileOpStruct...
 
Hallo!!

Ich habe hier des öfteren gelesen das man mit TSHFileOpStruct u.a. auch Ordner verschieben kann...

Delphi-Quellcode:
ZeroMemory(@lOS, SizeOf(lOS));
  lDrivePath := GetDrivePath;
  lSubFolder := ExtractRelativePath(lDrivePath, aFromDir);
 
  lFromDir := IncludeTrailingBackslash(aFromDir) + '*.*';
  lToDir := IncludeTrailingBackslash(aToDir) + lSubFolder;
  with lOS do
  begin
    wFunc := FO_MOVE;
    fFlags := FOF_NOCONFIRMMKDIR;
    pFrom := PChar(lFromDir + #0);
    pTo   := PChar(lToDir)
  end;
  ShFileOperation(lOS);
Nur wenn ich es ausprobiere, funktioniert es nur wenn ich mit '*.*' jede beliebige Datei in diesem Ordner auswähle. Ansonsten kommt eine Fehlermeldung, daß er die Quelldatei nicht öffnen kann, was auch klar ist, da er ja einen Ordner und keine Datei vor sich hat!! Ist es daher nicht doch eher ein verschieben von Dateien in einem Ordner ist, aber nicht das Verschieben des Ordner selbst oder??
Kann mir da jemand Licht ins Dunkel bringen?? :roll:
Und wie kann ich tatsächlich den Ordner als ganzes Verschieben??

LG
Thomas

Christian Seehase 29. Jan 2007 20:54

Re: Ordner verschieben mit TSHFileOpStruct...
 
Moin Thomas,

doch geht, Du musst nur berücksichtigen, was ein Verzeichnis ist.
Z.B.
Dies ist, im Sinne von SHFileOperation, kein Verzeichnis:
C:\temp\unterverzeichnis

aber dies hier:
C:\temp\unterverzeichnis\.

Du musst bei pFrom also immer \. mit angeben, wenn Du ein Verzeichnis ansprechen willst.

der . dürfte auch aus FindFirst bekannt sein. Er steht für das Verzeichnis (.. steht für das übergeordnete Verzeichnis).

DP-Maintenance 29. Jan 2007 20:55

DP-Maintenance
 
Dieses Thema wurde von "Christian Seehase" von "Sonstige Fragen zu Delphi" nach "Windows API / MS.NET Framework API" verschoben.
Das ist eher ein Windows-API-Problem

bingo72 30. Jan 2007 06:35

Re: Ordner verschieben mit TSHFileOpStruct...
 
Morgen Chris,

um bei Deinem Beispiel zu bleiben:

Nehmen wir an ich habe folgende Ordner-Struktur:

C:\temp\unterverzeichnis1
C:\temp\unterverzeichnis2
C:\temp\unterverzeichnis3

..usw.

In jedem Unterverzeichnis sind ein paar Daten...jetzt möchte ich aber nur unterverzeichnis1 verschieben....die restlichen Unterverzeichnisse sollen bleiben....wie arbeite ich dann mit SHFileOperation?? Denn wenn ich C:\temp\unterverzeichnis1\. bei pFrom angebe schreibt er mir nach wie vor eine Fehlermeldung 'Quelldatei kann nicht gelesen werden' hin, obwohl sowohl Ordner + Files vorhanden sind, welche auch sicher nicht gerade in Verwendung sind.

MfG
Thomas

bingo72 30. Jan 2007 09:40

Re: Ordner verschieben mit TSHFileOpStruct...
 
Problem gelöst!!

Quell-Ordner müssen ohne \. angegeben werden....genauso verfahren bei Zielordner...!!
Als ich das gemacht hatte....motzte das System daß er den Quell-Ordner nicht löschen konnte...na gut da wußte ich zumindest, daß ich auf dem rchtigen Weg war...immrhin fand er jetzt zumindest den Quell-Ordner!!
Schließlih fand ich den Grund: Ich hatte ein FindClose von TSearchRec nicht angegeben hatte --> dadurch war dieses nach wie vor auf meinen Quell-Ordner gerichtet --> kein Zugriff auf Ordner beim Verschieben möglich und von daher auch die Fehlermeldungen...

Vielleicht hilft es ja wen... :stupid:

LG
Thomas


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:40 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