![]() |
Probleme mit SHFileOperation
Hallo, mal wieder ein kleines Problem!
Aus diesem Thread --> ![]()
Delphi-Quellcode:
Im ersten Durchlauf ist alles bestens:
uses ShellAPI;
function MyCopy(Quelle, Ziel: string):Boolean; var fos: TSHFileOpStruct; begin ZeroMemory(@fos, SizeOf(fos)); with fos do begin wFunc := FO_COPY; fFlags := FOF_FILESONLY // nur Dateien wenn Wildcard (*.*) verwendet werden or FOF_NOCONFIRMATION; // Keine Abfrage, es wird JA angenommen (z.B. überschreiben) pFrom := PChar(Quelle + #0); pTo := PChar(Ziel) end; Result := (0 = ShFileOperation(fos)); end;
Delphi-Quellcode:
erzeugt folgendes:
MyCopy('c:\source_path','c:\dest_path')
Code:
Aber beim zweiten Durchlauf sieht die Sache so aus (inkl. der unangetasteten Dateien aus dem ersten Durchgang):
c:\dest_path\file1.txt
c:\dest_path\file2.txt c:\dest_path\file3.txt
Code:
Die nächsten Runden schreiben wie im zweiten Durchlauf, dort werden also die Dateien überschrieben.
c:\dest_path\source_path\file1.txt
c:\dest_path\source_path\file2.txt c:\dest_path\source_path\file3.txt Ich will aber weiterhin kopieren, wie im ersten Durchgang (ohne Rückfrage - einfach blöd und brtual kopieren) ohne den Ordner aus dem Source-Pfad. Wie kann ich verhindern, dass in den weiteren Durchläufen die Dateien eine Ebene tiefer kopiert werden? |
AW: Probleme mit SHFileOperation
So vielleicht
Delphi-Quellcode:
?
MyCopy('c:\source_path\*.*','c:\dest_path')
|
AW: Probleme mit SHFileOperation
versuch mal
Delphi-Quellcode:
MyCopy('c:\source_path\*.*', 'c:\dest_path');
oder MyCopy('c:\source_path\*.*', 'c:\dest_path\');
Delphi-Quellcode:
kopiert eigentlich das Verzeichnis source_path nach dest_path und nicht die Dateien in source_path,
MyCopy('c:\source_path', 'c:\dest_path');
womit ich eigentlich immer das zweite Ergebnis erwartet hätte. [edit] och menno :cry: [add] Häng bitte an das Ziel auch noch die zweite #0 an >
Delphi-Quellcode:
.
PChar(Ziel + #0)
Das sind beides Listen, also müssen Beide mit #0#0 abgeschlossen werden. [add]
Delphi-Quellcode:
function MyCopy(Quelle, Ziel: string): Boolean;
var fos: TSHFileOpStruct; begin Quelle := IncludeTrailingPathDelimiter(Quelle) + '*.*'#0; Ziel := IncludeTrailingPathDelimiter(Ziel) + #0; // oder Ziel := ExcludeTrailingPathDelimiter(Ziel) + #0; ... pFrom := PChar(Quelle); pTo := PChar(Ziel); |
AW: Probleme mit SHFileOperation
Zitat:
Wenn dest_path existiert, dann wird das als Kopierziel betrachtet und der Ordner wird dorthin kopiert. |
AW: Probleme mit SHFileOperation
Zitat:
Was passiert, wenn man dem Ziel einen \ anhängt? |
AW: Probleme mit SHFileOperation
Zitat:
so werden Unterverzeichnisse nicht mitkopiert und beim ersten Anlegen gibt es eine Rückfrage, ob das Verzechnis angelegt werden soll.
Delphi-Quellcode:
kopiert Unterverzechnisse mit.
MyCopy('c:\source_path\', 'c:\dest_path');
oder MyCopy('c:\source_path\', 'c:\dest_path\'); :-( Aber jetzt erstmal:
Delphi-Quellcode:
Repeat
Sleep; Until Wecker=bimmelt; |
AW: Probleme mit SHFileOperation
Zitat:
Zumindestesns sagst du SHFileOperation, daß du das so willst, da FOF_FILESONLY gesetzt ist. Zitat:
![]() ![]() |
AW: Probleme mit SHFileOperation
Windows hat natürlich ein Problem,dass es sich entscheiden muss, wenn bei
Delphi-Quellcode:
MyCopy('c:\source_path\', 'c:\dest_path');
Code:
nicht existiert.
C:\dest_path
Was soll es werden? Eine Datei oder ein Verzeichnis? Somit wäre mein letzter Vorschlag für einen Versuch noch folgende Schreibweise
Delphi-Quellcode:
.
MyCopy('c:\source_path', 'c:\dest_path\');
Denn es gibt einen Unterschied zwischen einem Verzeichnis und einem Pfad.
Code:
Eine Pfadangabe hat immer den PathDelimiter am Ende stehen, andernfalls ist es ein Verzeichnis (oder sogar eine Datei)
C:\MeinVerzeichnis
C:\MeinPfad\ |
AW: Probleme mit SHFileOperation
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04: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