![]() |
[.] und [..] NICHT auflisten.
Hallo,
ich bins mal wieder :) Habe mal eine Frage zu folgendem Code:
Code:
Problem: Beim Auslesen des Verzeichnisses werden '.' und '..' mit aufgelistet. Die Frage, die ich mir jetzt stelle:
begin
s := FindFirst('R:\*.*', faDirectory, f); try while s = 0 do begin if f.Attr and faDirectory = faDirectory then ListBox1.Items.Add(f.Name); s := FindNext(f); end; finally FindClose(f); end; end; if f.name = '.' then .... mach irgendwas --> funktioniert if not f.name = '.' then ... mach etwas ----> funktioniert NICHT (Fehlermeldung: Operator ist auf diesen Operandentyp nicht anwendbar) WARUM ???? Gruß Kieni |
AW: [.] und [..] NICHT auflisten.
Delphi-Quellcode:
oder schöner:
if not (f.name = '.') then
Delphi-Quellcode:
if f.name <> '.' then
|
AW: [.] und [..] NICHT auflisten.
Klammern setzten?
Delphi-Quellcode:
.
if not (f.name = '.') then
NOT hat Vorrang vor =, was dann für den Compiler
Delphi-Quellcode:
bedeuten würde.
if (not f.name) = '.' then
Ansonsten ... wozu NOT?
Delphi-Quellcode:
, bzw
if f.name <> '.' then
Delphi-Quellcode:
.
if (f.name <> '.') and (f.name <> '..') then
[edit] zu langsam :? |
AW: [.] und [..] NICHT auflisten.
oh mann.... ! :shock:
Danke... funzt EINWANDFREI :) |
AW: [.] und [..] NICHT auflisten.
grrrrrrrrrrrrrrrrrrrrrrrrr....
ich verstehe es einfach nicht, und so langsam verliere ich die Geduld ..:( der folgende code macht im groben und ganzen was er soll: kopiere das R:\ laufwerk nach C:\FSS-Backup.
Code:
Das einzige Manko: Der erste Ordner wird nicht angelegt, sondern alle Unterordner einfach im root Fss-Backup abgelegt ... Ich habe nicheinmal ne idee.... Einer von euch eventuell?
unit main;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ShellAPI; type TBack_it_up = class(TForm) cmd_start: TButton; cmd_close: TButton; lbl_start: TLabel; lbl_stop: TLabel; lbl_start_2: TLabel; lbl_stop_2: TLabel; lbl_status: TLabel; procedure cmd_startClick(Sender: TObject); procedure cmd_closeClick(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; Function DeleteDir(DirName : string): Boolean; function Sh_FileCopyMove(aWND: HWND; const Source,Dest: string; DoMove: boolean; var IsAborted: boolean; Flags: FILEOP_FLAGS=0): Boolean; var Back_it_up: TBack_it_up; const backup_this = 'R:\'; backup_new = 'C:\Backup-FSS'; backup_old = 'C:\Backup-FSS(Old)'; implementation {$R *.dfm} procedure TBack_it_up.cmd_startClick(Sender: TObject); var IsAborted: boolean; f : TSearchRec; s : Integer; begin cmd_start.Enabled:=false; lbl_start_2.Caption:=DateTimeToStr(Now); Application.ProcessMessages; if DirectoryExists(backup_old) then DeleteDir(backup_old); if DirectoryExists(backup_new) then MoveFile(backup_new, backup_old); begin s := FindFirst(backup_this + '*.*', faDirectory, f); try while s = 0 do begin if f.Attr and faDirectory = faDirectory then if (f.name <> '.') and (f.name <> '..') then begin lbl_status.Caption:='Current directory: ' + f.Name; Application.ProcessMessages; Sh_FileCopyMove(Back_it_up.Handle, backup_this+f.Name, backup_new, false, IsAborted) end; s := FindNext(f); end; finally FindClose(f); end; end; lbl_stop_2.caption:=DateTimeToStr(Now); lbl_status.Caption:='Backup completed'; end; Beispiel: Laufwerk R:\ Ordner1\01_1 Ordner1\01_2 Ordner1\01_3 Ordner2\02_1 Ordner2\02_2 Ordner2\02_3 Programmdurchlauf C:\Backup-FSS\01_1 C:\Backup-FSS\01_2 C:\Backup-FSS\01_3 C:\Backup-FSS\Ordner2\02_1 C:\Backup-FSS\Ordner2\02_2 C:\Backup-FSS\Ordner2\02_3 Ich hoffe ihr versteht was ich meine....Ordner1 wird einfach nicht angelegt! Gruß Kieni |
AW: [.] und [..] NICHT auflisten.
Wäre es nicht einfacher, rekursiv zu kopieren, statt diesem Mischmasch aus FindFirst und SHFileOperation?
|
AW: [.] und [..] NICHT auflisten.
Wo wird der Ordner backup_new nach dem löschen neu erstellt?
Edit: Sollte es nicht heissen
Delphi-Quellcode:
if (f.name <> '.') or (f.name <> '..')
|
AW: [.] und [..] NICHT auflisten.
Die Benutzung des Debuggers würde hier weiter helfen.
Dann ist man nicht so auf Vermutungen angewiesen. @DeddyH Hab ich da etwas übersehen? Da ist doch überhaupt nichts rekursiv. Er bewegt sich nur auf einer "Ebene". Gruß K-H |
AW: [.] und [..] NICHT auflisten.
Deshalb ja meine Frage ;)
|
AW: [.] und [..] NICHT auflisten.
Guten Morgen alle zusammen...
Diesen "Mischmasch" musste ich ja nur machen, weil Sh_FileCopyMove..... kein Laufwerk kopieren kann... Habe jetzt auch herrausgefunden, wie ich es umgehen kann. Ist der Ordner "backup_new" bei Aufruf der Funktion "Sh_FileCopyMove" vorhanden, werden die Ornder richtig kopiert. Warum? Keine Ahnung... In der Hilfe finde ich dazu leider auch nichts. Aber interessieren würde es mich trotzdem... :D Gruß Kieni |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:04 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz