Announcement

Collapse
No announcement yet.

Wie kann ich komplette Verzeichnisse kopieren ???

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Wie kann ich komplette Verzeichnisse kopieren ???

    Hi,

    wie kann ich komplette Verzeichnisse mit Unterberzeichnissen kopieren (natürlich mit dateien drin ???
    Ich habe es schon mit dem DOS Befehl XCopy versucht aber das funktioniert nicht mit langen Ordnernamen (und auch nicht mit langen Dateinamen).
    Gibt es dafür vielleicht irgend einen Delphi5 befehl oder so?

    Gruß Hendrik R.

  • #2
    Hallo,

    mit der Win32-API-Funktion <b>SHFileOperation</b> können auch vollständige Verzeichnisbäume kopiert, verschoben und gelöscht werden. Allerdings gibt es bei den sogenannten <i>Special Folders</i> einige Ausnahmen - normale Verzeichnisse sind davon nicht betroffen. Dazu die gesuchten Beispiele:

    1. Verzeichnisbaum kopieren:

    <pre>
    uses ShellAPI;
    procedure TForm1.ButtonMoveDirClick(Sender: TObject);
    var
    aSHFOS : TSHFileOpStruct;
    szFrom : array[0..128] of Char;
    szTo : array[0..128] of Char;
    begin
    // Puffervariablen initialisieren (Doppel-Null!)
    FillChar(aSHFOS, Sizeof(aSHFOS), #0);
    FillChar(szFrom, Sizeof(szFrom), #0);
    FillChar(szTo, Sizeof(szTo), #0);
    // Ausgangs- und Zielverzeichnis festlegen
    StrPCopy(szFrom, 'C:\Temp\Out\*.*');
    StrPCopy(szTo, 'T:\Tmp');
    with aSHFOS do
    begin
    Wnd := Handle;
    wFunc := FO_COPY;
    pFrom := @szFrom;
    pTo :=@szTo;
    fFlags := FOF_NOCONFIRMATION or FOF_RENAMEONCOLLISION;
    fAnyOperationsAborted := False;
    hNameMappings := nil;
    lpszProgressTitle:= nil;
    end;
    ShFileOperation(aSHFOS);
    end;
    </pre>
    2. Verzeichnisbaum löschen:
    <pre>
    procedure TForm1.ButtonDeleteDirClick(Sender: TObject);
    var
    aSHFOS : TSHFileOpStruct;
    szFrom : array[0..128] of Char;
    begin
    // Puffervariablen initialisieren (Doppel-Null!)
    FillChar(aSHFOS, Sizeof(aSHFOS), #0);
    FillChar(szFrom, Sizeof(szFrom), #0);
    // Zu löschendes Verzeichnis definieren
    StrPCopy(szFrom, 'C:\Test\StdOut');
    with aSHFOS do
    begin
    Wnd := Handle;
    wFunc := FO_DELETE;
    pFrom := @szFrom;
    fFlags := FOF_NOCONFIRMATION or FOF_ALLOWUNDO;
    fAnyOperationsAborted := False;
    end;
    ShFileOperation(aSHFOS);
    end;
    </pre&gt

    Comment


    • #3
      Danke!

      Es funktioniert! Kannst du mir vielleicht auch noch mit meinem TFileStream Problem helfen?
      Das ist die Diskussion unter dieser hier...

      MfG

      Hendri

      Comment


      • #4
        hi @all

        dieses thema ist zwar schon etwas älter, aber ich habe dazu noch ne frage...:
        das kopieren funktioniert super, aber kann ich noch ne mask einbauen, sodass er zb. keine dateien mit der endung *.bmp kopiert?

        greetz

        Comment

        Working...
        X