Autor Beitrag
Toz
Hält's aus hier
Beiträge: 12



BeitragVerfasst: So 14.10.12 22:14 
Hallo,
ich habe ein kleines Programm (für meinen Vater) geschrieben, bei dem er mit einem einzigen Klick sein User-Verzeichnis kopieren kann als einer art Backup.

Das Programm läuft auf meinem Computer (Win7 x64) und meinem Laptop (Win7 x86) einwandfrei nur bei meinem Vater(Win7 x64) werden jeweils NUR die Dateien die im Userverzeichnis liegen kopiert nicht die Unterordner.

Weiß einer von euch Rat?

Noch eine Frage, wie kann ich nur sichtbare Elemente kopieren, will halt nicht z.B. AppData kopieren

So sieht meine Copy Funktion aus
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
function TMainForm.CopyDir(const fromDir, toDir: string): Boolean;
var
  fos: TSHFileOpStruct;
begin
  ZeroMemory(@fos, SizeOf(fos));
  with fos do
  begin
    wFunc  := FO_COPY;
    fFlags := FOF_SIMPLEPROGRESS;
    pFrom  := PChar(fromDir + #0);
    pTo    := PChar(toDir)
  end;
  Result := (0 = ShFileOperation(fos));
end;


und so rufe ich die dann auf

ausblenden Delphi-Quelltext
1:
CopyDir(GetEnvironmentVariable('USERPROFILE'), ExtractFilePath(ParamStr(0))+'Backup\')					
peeage
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 50



BeitragVerfasst: Mi 24.10.12 09:36 
Hallo Toz,

hast Du schonmal den Rückgabe- Wert von ShFileOperation geprüft? Ist dieser ungleich 0?


Wenn Du versteckte Dateien/Ordner ignorieren willst, empfehle ich Dir folgende Vorgehensweise:

ausblenden 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:
procedure CopyNonHiddenFilesRecrsv( strSrcDir, strDstDir : String;
  const strMask : String );
var
  SR            : TSearchRec;
  strSearchPath : String;
  nAttr         : Integer;
begin
  strSrcDir     := IncludeTrailingBackslash( strSrcDir );
  strDstDir     := IncludeTrailingBackslash( strDstDir );

  strSearchPath := strSrcDir + strMask;
  nAttr         := ( faAnyFile and faDirectory and not faHidden );

  CreateDir( strDstDir );

  if ( FindFirst(strSearchPath, nAttr, SR) = 0 ) then
  try
    repeat
      if ( (SR.Attr and faDirectory) <> faDirectory ) then
        CopyFile( PChar(strSrcDir + SR.Name), PChar(strDstDir + SR.Name), False )
      else if ( (SR.Name <> '.'and (SR.Name <> '..') ) then
          CopyNonHiddenFilesRecrsv( PChar(strSrcDir + SR.Name), PChar(strDstDir + SR.Name),
            strMask );
    until ( FindNext(SR) <> 0 );
  finally
    FindClose( SR );
  end;
end;


Aufrufen kannst Du das Ganze dann wie folgt:

ausblenden Delphi-Quelltext
1:
CopyNonHiddenFilesRecrsv( GetEnvironmentVariable('USERPROFILE'), ExtractFilePath(ParamStr(0)) + 'Backup\''*.*' );