Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Ordner Kopieren (https://www.delphipraxis.net/40882-ordner-kopieren.html)

ferby 22. Feb 2005 17:10


Ordner Kopieren
 
Hallo,

Im Ornder A ist der Ordner B.
Ordner B hat viele unterordner und Dateien, ich möchte jetzt das ordner B (mit allen was drin ist + unterordner) beim klick auf einen Button kopiert wird und zwar in den Ordner A mit der bezeichnung B1, wenn ich nochmal diesen Button drücke dann B2 usw....

Ich weiß nicht wie die Befehle gehen um einen Ordner zu kopieren.
Wie Frage ich ab wiviele Bx Ordner es schon gibt?


Ist meine Frage versändlich?????




Ferby

Sprint 22. Feb 2005 17:15

Re: Ordner Kopieren
 
Suche in diesem Forum nach SHFileOperation, CopyFile & MoveFile.

Matze 22. Feb 2005 17:15

Re: Ordner Kopieren
 
Einfach suchen Hier im Forum suchenverzeichnis kopieren. Oder in der Code-Library gucken.

ferby 22. Feb 2005 17:44

Re: Ordner Kopieren
 
Hallo,

Ich habe jetzt selbst gesucht, nur nicht wirklich eine lösung gefunden, immer nur code den ich überhaupt nicht verstehe.
Wäre es möglich einfach mir den code zu schreiben wie ich einen ordner von a nach b kopiere und mir diesen quellcode zu erklären den rest versuche ich dann selbst zu machen.................

Ich habe nur gefunden

Delphi-Quellcode:
fos: TSHFileOpStruct;
begin

  with fos do
  begin
    wFunc := FO_COPY;
    fFlags := FOF_FILESONLY;
    pFrom := PChar('C:/test/a');
    pTo   := PChar('C:/test/b')
  end;

aber da tut sich überhaupt nichts....

Matze 22. Feb 2005 17:46

Re: Ordner Kopieren
 
Dann benutze das hier.

Nachtrag: Wie rufst du denn obigen Code auf? :gruebel:

jfheins 22. Feb 2005 17:51

Re: Ordner Kopieren
 
Falls du Fragen zu dem Konstrukt da hast:
http://msdn.microsoft.com/library/de...leopstruct.asp

ferby 22. Feb 2005 18:03

Re: Ordner Kopieren
 
Hallo,

danke, jetzt bin ich ein wenig weiter, ich schreibe wenn ich wieder ein problem habe.



ferby

ferby 22. Feb 2005 18:28

Re: Ordner Kopieren
 
Hallo,

Also jetzt habe ich ein Problemm...
irgendwo muss ein Denkfehler sein

if ferwende die funktion

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;

Und so ruf ich die funktion auf

Delphi-Quellcode:
  i:=0;
  while fileexists('C:\Programme\ferby\datenbank\kopie\data' + inttostr(i)) do inc(i);
  inc(i);
  copydir('C:\Programme\ferby\datenbank\data','C:\Programme\ferby\datenbank\kopie\data' + inttostr(i))

das erste mal macht er die kopie wenn ich dann aber noch eine koopie machen will dann mancht er keinen neuen ordner data2 usw....

DelphiFreund 22. Feb 2005 18:36

Re: Ordner Kopieren
 
Das hatte ich auch mal vor, ich hab mir ne Funktion geschrieben, die die Ordner mit allen Unterordnern erzeugt:
Delphi-Quellcode:
function CutPath(S: String): String;
var
  i, L: Integer;
begin
  Result:= '';
  L:= Length(S);
  if L = 0 then Exit;
  for i:= L - 1 downto 1 do begin
    if S[i] = '\' then begin
      Result:= Copy(S, 1, i - 1);
      Exit;
    end;
  end;
end;

function CreateFolders(S: String): Boolean;
var
  TempString: String;
  TempFolder: array of String;
  i: Integer;
begin
  i:= 0;
  TempString:= S;
  Result:= True;
  if DirectoryExists(S) then Exit;
  while not DirectoryExists(TempString) do begin
    if TempString = '' then begin
      TempFolder:= nil;
      Result:= False;
      Exit;
    end;
    Inc(i);
    SetLength(TempFolder, i);
    TempFolder[i - 1]:= TempString;
    TempString:= CutPath(TempString);
  end;
  while i > 0 do begin
    CreateDir(TempFolder[i - 1]);
    Dec(i);
  end;
  TempFolder:= nil;
end;
Du musst einfach den Pfad angeben, dann werden die Ordner erzeugt. Das eigentlich kopieren von Dateien, ist dann das kleinere Problem.

Gruß DelphiFreund

Matze 22. Feb 2005 18:40

Re: Ordner Kopieren
 
@ferby: ich denke eine while-Schleife ist da nicht angebracht und 2 x inc(i); wohl auch nicht.

Nachtrag: Und bitte immer die [delphi]-Tags verwenden.

Binärbaum 22. Feb 2005 19:47

Re: Ordner Kopieren
 
Zitat:

Zitat von ferby
Und so ruf ich die funktion auf

Delphi-Quellcode:
  i:=0;
  while fileexists('C:\Programme\ferby\datenbank\kopie\data' + inttostr(i)) do inc(i);
  inc(i);
  copydir('C:\Programme\ferby\datenbank\data','C:\Programme\ferby\datenbank\kopie\data' + inttostr(i))

das erste mal macht er die kopie wenn ich dann aber noch eine kopie machen will dann mancht er keinen neuen ordner data2 usw....

Das wir er auch nie, da FileExists IMHO nur die Existenz von Dateien, nicht die von Ordnern überprüfen kann. Also wird FileExists im obigen Beispiel immer False zurückgeben, auch wenn der Ordner existiert, da es ja keine Datei ist. Demzufolge wird also immer nach "C:\Programme\ferby\datenbank\kopie\data1" kopiert. Zu den Ordnern data2, data3 usw. kommt man nie.

MfG
Binärbaum

//Edit: Tippfehler

Ultimator 22. Feb 2005 20:30

Re: Ordner Kopieren
 
MSDN-Library durchsuchenFolderExists ;-)

DelphiFreund 22. Feb 2005 20:52

Re: Ordner Kopieren
 
oder auch DirectoryExists(Directory: String);

ferby 22. Feb 2005 21:57

Re: Ordner Kopieren
 
Hallo,

jetzt gehts, danke an alle die mir geholfen haben,
hier der quelltext:

Delphi-Quellcode:
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;

procedure TDatenbank.button_sicherheitskopieClick(Sender: TObject);
var
i:integer;
begin
  i:=1;
  while DirectoryExists('C:\Programme\ferby\datenbank\kopie\data' + inttostr(i)) do inc(i);
  copydir('C:\Programme\ferby\datenbank\data','C:\Programme\ferby\datenbank\kopie\data' + inttostr(i))
end;

retnyg 23. Feb 2005 01:04

Re: Ordner Kopieren
 
Zitat:

Zitat von ferby
Delphi-Quellcode:
  while DirectoryExists('C:\Programme\ferby\datenbank\kopie\data' + inttostr(i)) do inc(i);
  copydir('C:\Programme\ferby\datenbank\data','C:\Programme\ferby\datenbank\kopie\data' + inttostr(i))

fehlt da nicht ein begin end ? ;)

Binärbaum 23. Feb 2005 10:09

Re: Ordner Kopieren
 
Zitat:

Zitat von retnyg
Zitat:

Zitat von ferby
Delphi-Quellcode:
  while DirectoryExists('C:\Programme\ferby\datenbank\kopie\data' + inttostr(i)) do inc(i);
  copydir('C:\Programme\ferby\datenbank\data','C:\Programme\ferby\datenbank\kopie\data' + inttostr(i))

fehlt da nicht ein begin end ? ;)

Nein, er will ja nur die Variable i hochzählen, bis das angegebene Verzeichnis nicht existiert, und erst dann soll der Ordner kopiert werden (so hab ich das zumindest verstanden). Es wird also nur einmal kopiert. Falls man mehrere Ordner haben will, muss man den Code halt mehrmals ausführen.

MfG
Binärbaum


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