Toz - So 14.10.12 22:14
Titel: Kopieren des User Verzeichnisses klappt nicht immer
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
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
Delphi-Quelltext
1:
| CopyDir(GetEnvironmentVariable('USERPROFILE'), ExtractFilePath(ParamStr(0))+'Backup\') |
peeage - 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:
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:
Delphi-Quelltext
1:
| CopyNonHiddenFilesRecrsv( GetEnvironmentVariable('USERPROFILE'), ExtractFilePath(ParamStr(0)) + 'Backup\', '*.*' ); |