Autor Beitrag
PhilGo
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 315

Win 98, Win Longhorn ;-)

BeitragVerfasst: Sa 17.04.04 11:03 
Hi,
ich will ein Verzeichniss kopieren mit allen Unterverzeichnissen. Hat jemand eine Ahnung wie man da die ganzen Unterverzeichnisse erkennt?


Mfg PhilGo

_________________
Sie werden dich finden und töten... Söhne der großen Bärin!
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 17.04.04 11:08 
A) Du machst es selbst mit Suche in: Delphi-Forum, Delphi-Library FINDFIRST FINDNEXT.
B) Du benutzt die Shell-Funktion des Explorer: Suche in: Delphi-Forum, Delphi-Library SHFILEOPERATION KOPIEREN


Zitat:
Hat jemand eine Ahnung wie man da die ganzen Unterverzeichnisse erkennt?

Hierzu würde ich dich an die Suchfunktion verweisen: Suche nach Verzeichnis kopieren und grenze die Kategorie auf die FAQs ein. Das gibt einige Beispiele - zwar hat keins der Themen, so weit ich sehen konnte, deine Frage im Titel, aber du erhältst mehr als genug Material für Rekursion. Darauf läuft´s nämlich hinaus wenn du es mit FindFirst und Co. selbst machen willst.
MartinPb
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 698



BeitragVerfasst: Sa 17.04.04 11:35 
Bevor du Rückfragen hast erwarte ich, daß du den Quellcode studierts. Ich beantworte keine Fragen die man selbst erkennen kann.

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
// Vergleicht ob der erste Pfad mit dem Anfang des zweiten Übereinstimmt
function CompPath(FromPath, Path: String; var Count: Word): Boolean;
begin
  PathWithBackSlash(FromPath);

  Count := Length(FromPath);

  if CompareText(FromPath, Copy(Path, 1, Count)) = 0 then Result := True
    else
  begin
    Count := 0;
    Result := False;
  end;
end;

// Kopierfunktion
function CopyFileList(FromPath, ToPath: String; List: TStrings;
  ProgressBar: TProgressBar; var NoCopyCount: Word): Boolean;
var
  c: Integer;
  Count: Word;
  NewFile, NewPath: String;
begin
  Result := False;
  NoCopyCount := 0;
  ProgressBar.Max := List.Count - 1;

  if FromPath[Length(FromPath)] <> '\' then FromPath := FromPath + '\';
  if ToPath[Length(ToPath)] <> '\' then ToPath := ToPath + '\';

  for c := 0 to List.Count - 1 do
  begin
    ProgressBar.Position := c;

    if CompPath(FromPath, List[c], Count) then
    begin
      NewFile := List[c];
      Delete(NewFile, 1, Count);
      NewFile := ToPath + NewFile;

      NewPath := ExtractFilePath(NewFile);
      ForceDirectories(NewPath);

      if not CopyFile(PChar(List[c]), PChar(NewFile), False) then
        Inc(NoCopyCount);
    end
      else
    begin
      Inc(NoCopyCount);
    end;
  end;
end;


Angesprochen wird nur die Funktion CopyFileList

FromPath und ToPath sollten klar sein.

List enthällt die Liste aller zu kopierenden Dateien inc. Pfadangabe. In der Funktion wird dann ab dem FromPath Pfad kopiert. Sieht ein Pfad der Datei also so aus: c:\abc\def\ghi\jkl.txt und der FromPath so: c:\abc\def\, dann wird ab ghi\jkl.txt kopiert.

Die Liste muß bereits existieren. Dazu sehen den Tip FindFirst oben.

ProgressBar sollte auch klar sein. Wenn nicht benötigt, dann Nil.

Count gibt die Anzahl der nichtkopierten Dateien zurück.

Achso, das Fehler-Result ist noch nicht korrekt eingebaut. Also bitte kein Result aus der Funktion auswerten.

_________________
Gruß
Martin
toms
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1099
Erhaltene Danke: 2



BeitragVerfasst: Sa 17.04.04 12:34 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
uses 
  ShellApi; 

function CopyDir(const fromDir, toDir: string): Boolean; 
var 
  fos: TSHFileOpStruct; 
begin 
  ZeroMemory(@fos, SizeOf(fos)); 
  with fos do 
  begin 
    wFunc  := FO_COPY; 
    fFlags := FOF_FILESONLY; 
    pFrom  := PChar(fromDir + #0); 
    pTo    := PChar(toDir) 
  end; 
  Result := (0 = ShFileOperation(fos)); 
end;
PhilGo Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 315

Win 98, Win Longhorn ;-)

BeitragVerfasst: Di 20.04.04 15:38 
@all: Danke für die Anworten und die Source :D



Mfg PhilGo

_________________
Sie werden dich finden und töten... Söhne der großen Bärin!
initrc
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 20

Debian 3.1 sarge, FreeBSD, Windows 2000

BeitragVerfasst: Di 26.07.05 10:15 
user profile icontoms hat folgendes geschrieben:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
uses 
  ShellApi; 

function CopyDir(const fromDir, toDir: string): Boolean; 
var 
  fos: TSHFileOpStruct; 
begin 
  ZeroMemory(@fos, SizeOf(fos)); 
  with fos do 
  begin 
    wFunc  := FO_COPY; 
    fFlags := FOF_FILESONLY; 
    pFrom  := PChar(fromDir + #0); 
    pTo    := PChar(toDir) 
  end; 
  Result := (0 = ShFileOperation(fos)); 
end;


Wie kann ich diese Funktion aufrufen?

mit
ausblenden Quelltext
1:
2:
3:
4:
procedure TForm1.Button1Click(Sender: TObject);
begin
CopyDir;
end;

Schmeisst er mir ein "not enough actual parameters" raus, was ist daran falsch? :roll:
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 26.07.05 10:21 
Also mein Windows kann nicht hellsehen, welche Datei ich von wo nach wo kopieren will. :roll:
initrc
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 20

Debian 3.1 sarge, FreeBSD, Windows 2000

BeitragVerfasst: Di 26.07.05 10:33 
Ist klar.

Aber muss ich der Funkion direkt den Parameter mitgeben, was von wo nach wo kopiert werden soll?

ausblenden Quelltext
1:
CopyDir 'c:\*.*' , 'd:\';					


oder wie?

ausblenden Quelltext
1:
CopyDir (fromDir:='c:\*.*');					

Funzt auch nicht!
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 26.07.05 10:37 
Beschäftige dich mal mit den Grundlagen. In der Tutorialsparte gibt es einen guten Crashkurs von Christian.