AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Probleme mit SHFileOperation

Ein Thema von rainerg · begonnen am 15. Mai 2011 · letzter Beitrag vom 16. Mai 2011
Antwort Antwort
Benutzerbild von rainerg
rainerg

Registriert seit: 5. Aug 2002
Ort: Hannover
82 Beiträge
 
Delphi XE Starter
 
#1

Probleme mit SHFileOperation

  Alt 15. Mai 2011, 23:36
Hallo, mal wieder ein kleines Problem!

Aus diesem Thread --> http://www.delphipraxis.net/50745-xc...nachbauen.html habe ich von MaBuSe folgenden Code entnommen:
Delphi-Quellcode:
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;
Im ersten Durchlauf ist alles bestens:
MyCopy('c:\source_path','c:\dest_path') erzeugt folgendes:
Code:
c:\dest_path\file1.txt
c:\dest_path\file2.txt
c:\dest_path\file3.txt
Aber beim zweiten Durchlauf sieht die Sache so aus (inkl. der unangetasteten Dateien aus dem ersten Durchgang):

Code:
c:\dest_path\source_path\file1.txt
c:\dest_path\source_path\file2.txt
c:\dest_path\source_path\file3.txt
Die nächsten Runden schreiben wie im zweiten Durchlauf, dort werden also die Dateien überschrieben.

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?
Rainer G. aus H.
www.BunteReisebilder.de
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Probleme mit SHFileOperation

  Alt 15. Mai 2011, 23:43
So vielleicht MyCopy('c:\source_path\*.*','c:\dest_path') ?
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.330 Beiträge
 
Delphi 12 Athens
 
#3

AW: Probleme mit SHFileOperation

  Alt 15. Mai 2011, 23:45
versuch mal
Delphi-Quellcode:
MyCopy('c:\source_path\*.*', 'c:\dest_path');
oder
MyCopy('c:\source_path\*.*', 'c:\dest_path\');
MyCopy('c:\source_path', 'c:\dest_path'); kopiert eigentlich das Verzeichnis source_path nach dest_path und nicht die Dateien in source_path,
womit ich eigentlich immer das zweite Ergebnis erwartet hätte.

[edit]
och menno


[add]
Häng bitte an das Ziel auch noch die zweite #0 an > 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);
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (15. Mai 2011 um 23:52 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Probleme mit SHFileOperation

  Alt 15. Mai 2011, 23:50
womit ich eigentlich immer das zweite Ergebnis erwartet hätte.

[edit]
och menno
wenn dest_path nicht existiert, dann geht die Funktion davon aus, dass das der neue Name für das Verzeichnis sein soll.
Wenn dest_path existiert, dann wird das als Kopierziel betrachtet und der Ordner wird dorthin kopiert.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.330 Beiträge
 
Delphi 12 Athens
 
#5

AW: Probleme mit SHFileOperation

  Alt 15. Mai 2011, 23:54
wenn dest_path nicht existiert, dann geht die Funktion davon aus, dass das der neue Name für das Verzeichnis sein soll.
Wenn dest_path existiert, dann wird das als Kopierziel betrachtet und der Ordner wird dorthin kopiert.
Das ist ja blöde und das steht nimma im MSDN drin.

Was passiert, wenn man dem Ziel einen \ anhängt?
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (15. Mai 2011 um 23:57 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von rainerg
rainerg

Registriert seit: 5. Aug 2002
Ort: Hannover
82 Beiträge
 
Delphi XE Starter
 
#6

AW: Probleme mit SHFileOperation

  Alt 16. Mai 2011, 00:22
versuch mal
Delphi-Quellcode:
MyCopy('c:\source_path\*.*', 'c:\dest_path');
oder
MyCopy('c:\source_path\*.*', 'c:\dest_path\');
'Eigentlich' läuft das damit, ABER ...
so werden Unterverzeichnisse nicht mitkopiert und beim ersten Anlegen gibt es eine Rückfrage, ob das Verzechnis angelegt werden soll.

Delphi-Quellcode:
MyCopy('c:\source_path\', 'c:\dest_path');
oder
MyCopy('c:\source_path\', 'c:\dest_path\');
kopiert Unterverzechnisse mit.



Aber jetzt erstmal:
Delphi-Quellcode:
Repeat
     Sleep;
Until Wecker=bimmelt;
Rainer G. aus H.
www.BunteReisebilder.de
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.330 Beiträge
 
Delphi 12 Athens
 
#7

AW: Probleme mit SHFileOperation

  Alt 16. Mai 2011, 06:30
'Eigentlich' läuft das damit, ABER ...
so werden Unterverzeichnisse nicht mitkopiert
Aber genau das willst du doch?
Zumindestesns sagst du SHFileOperation, daß du das so willst, da FOF_FILESONLY gesetzt ist.

und beim ersten Anlegen gibt es eine Rückfrage, ob das Verzechnis angelegt werden soll.
Und auch das wolltest du so, da FOF_NOCONFIRMMKDIR nicht gesetzt ist.

MSDN-Library durchsuchenShFileOperation > MSDN-Library durchsuchenSHFILEOPSTRUCT
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (16. Mai 2011 um 07:40 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: Probleme mit SHFileOperation

  Alt 16. Mai 2011, 07:29
Windows hat natürlich ein Problem,dass es sich entscheiden muss, wenn bei
MyCopy('c:\source_path\', 'c:\dest_path');
Code:
C:\dest_path
nicht existiert.

Was soll es werden? Eine Datei oder ein Verzeichnis?

Somit wäre mein letzter Vorschlag für einen Versuch noch folgende Schreibweise
MyCopy('c:\source_path', 'c:\dest_path\'); .

Denn es gibt einen Unterschied zwischen einem Verzeichnis und einem Pfad.
Code:
C:\MeinVerzeichnis
C:\MeinPfad\
Eine Pfadangabe hat immer den PathDelimiter am Ende stehen, andernfalls ist es ein Verzeichnis (oder sogar eine Datei)
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von rainerg
rainerg

Registriert seit: 5. Aug 2002
Ort: Hannover
82 Beiträge
 
Delphi XE Starter
 
#9

AW: Probleme mit SHFileOperation

  Alt 16. Mai 2011, 07:55
'Eigentlich' läuft das damit, ABER ...
so werden Unterverzeichnisse nicht mitkopiert
Aber genau das willst du doch?
Zumindestesns sagst du SHFileOperation, daß du das so willst, da FOF_FILESONLY gesetzt ist.
...
Und auch das wolltest du so, da FOF_NOCONFIRMMKDIR nicht gesetzt ist.
...
Öh, okay - dann sollte ich mir die Parameter nochmal genauer anschauen - ich habe (zugegebenermaßen, die Sache einfach nur dumm kopiert!
Rainer G. aus H.
www.BunteReisebilder.de
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:23 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz