![]() |
Schleife
Delphi-Quellcode:
Morgen, der Code löscht bestimmte Dateien, überprüft dann ob sie noch vorhanden sind und schreibt die dazugehörige Zeile. Mein Problem ist das er das nur bei der ersten Datei die Zeile schreibt weil das "SearchForFile" nicht ein eine Schleife eingebunden ist.
begin
for HDD:='C' to 'Z' do if SearchForFile(HDD + ':\', Filename, APathFound) then begin repeat DeleteFile(ApathFound+Filename); until SearchForFile(HDD + ':\', Filename, APathFound)=false; end; if SearchForFile(HDD + ':\', Filename, APathFound) then WriteLn(myFile, Filename + ' available on: ' + APathFound) else WriteLn(myFile, Filename + ' is not available'); CloseFile(myFile); end; Ich hab es auch nich hinbekommen und brauche jetz eure Hilfe =) Danke |
Re: Schleife
ich hätte das so geschrieben,
hast dus so schon ausprobiert ?
Delphi-Quellcode:
begin
for HDD:='C' to 'Z' do if SearchForFile(HDD + ':\', Filename, APathFound) then begin repeat DeleteFile(ApathFound+Filename); if SearchForFile(HDD + ':\', Filename, APathFound) then WriteLn(myFile, Filename + ' available on: ' + APathFound) else WriteLn(myFile, Filename + ' is not available'); until SearchForFile(HDD + ':\', Filename, APathFound)=false; end; CloseFile(myFile); end; |
Re: Schleife
Hi,
wirklich besser ist das auch nicht :-)
Delphi-Quellcode:
Gruss
begin
for HDD:='C' to 'Z' do if SearchForFile(HDD + ':\', Filename, APathFound) then begin repeat DeleteFile(ApathFound+Filename); until not SearchForFile(HDD + ':\', Filename, APathFound); end else WriteLn(myFile, Filename + ' is not available on ', HDD); CloseFile(myFile); end; |
Re: Schleife
thkerkmann in deinem code hast du "is available" nich berücksichtigt, also mein code soll schon bestehen bleiben, nur umgeschrieben..
// funktioniet doch nicht,findet garkeine dateien mehr D: |
Re: Schleife
Das ist mein Code nun, die erste Datei wird prima auf allen Laufwerken aufgelistet, ob sie da is oder nicht.. Aber dann bleibt er wieder hängen, die Schleife ist noch nich ganz richtig was mach ich falsch ?! :/
Delphi-Quellcode:
Procedure DeletingFiles(Filename:String);
begin for HDD:='C' to 'Z' do if SearchForFile(HDD + ':\', Filename, APathFound) then begin repeat DeleteFile(ApathFound+Filename); WriteLn(myFile, ':: '+ Filename + ' available on: ' + APathFound) until not SearchForFile(HDD + ':\', Filename, APathFound); end else WriteLn(myFile, Filename + ' is not available on ', HDD); CloseFile(myFile); end; |
Re: Schleife
Hi,
also dann musst du uns mal sagen, welchen Eingangswert denn "Filename" bei Dir hat. Und woher kommt SearchForFile, kenn ich gar nicht. Und was heist "bleibt hängen" ? Die Schleife läuft doch über alle Laufwerke und ist dann zu Ende. Und du sagst die erste Datei zeigt er auch an auf allen Laufwerken. Wie ruftst Du die Prozedur denn auf ? Auch wieder in einer Schleife über irgendwas ? Gruss |
Re: Schleife
das sind meine prozeduren , ja hätt ich mit posten sollen. habs jetz gefixxt , das closefile musste raus weil er ja so nach der ersten file closed hat obwohl noch eine kam ..und neu geöffnet hat er es ja auch nich..naja problem behoben , danke
|
Re: Schleife
Ein weiteres Problem besteht dadrin das ich den Exit nich hinkriege wenn eine File nicht vorhanden ist.
Delphi-Quellcode:
Also sowas wie
Procedure DeletingFiles(Filename:String);
begin for HDD:='C' to 'Z' do if SearchForFile(HDD + ':\', Filename, APathFound) then begin repeat DeleteFile(ApathFound+Filename); WriteLn(myFile, ':: '+ Filename + ' available on: ' + APathFound) until not SearchForFile(HDD + ':\', Filename, APathFound); end else WriteLn(myFile, Filename + ' is not available on ', HDD); end; else WriteLn(myFile, Filename + ' is not available on ', HDD) + Exit; |
Re: Schleife
Delphi-Quellcode:
Warum willst Du denn hier die Schleife verlassen.
else
WriteLn(myFile, Filename + ' is not available on ', HDD) + Exit; Wenn Du da die for Schleife mit break verlaesst kannst Du nicht sicher sein das alle Laufwerke durchsucht wurden. Gruesse Klaus |
Re: Schleife
Naja klar , ich will nich die Schleife verlassen sondern was ich will ist:
Wenn eine Datei nicht vorhanden ist soll mein Programm die Zeile "not available" schreiben und sich danach schließen. Wenn aber alles vorhanden ist dann solls ganz normal weiter gehen .. |
Re: Schleife
Delphi-Quellcode:
vielleicht geht es so?
function DeletingFiles(Filename:String):Boolean;
begin result:=true; for HDD:='C' to 'Z' do if SearchForFile(HDD + ':\', Filename, APathFound) then begin repeat DeleteFile(ApathFound+Filename); WriteLn(myFile, ':: '+ Filename + ' available on: ' + APathFound); result:=true; until not SearchForFile(HDD + ':\', Filename, APathFound); end else begin WriteLn(myFile, Filename + ' is not available on ', HDD); result:=false; end; end; Gruesse KLaus |
Re: Schleife
Danke für deine schnelle Antwort aber so funktioniert es auch nicht. Vielleicht sollte ich es nochmal besser erklären:
Die Prozedur löscht Dateien. Danach durchsucht sie Die Festplatten nach den Dateien und schreibt mir in eine .txt Datei ob die jeweilige Datei vorhanden ist oder nicht. Ich möchte das dass Programm nachdem es rausgefunden hat das die Datei nicht vorhanden ist keine weiteren Befehle ausführt und schließt. Also das Programm schreibt das eine Datei nicht vorhanden ist und schließt danach. Wenn die Dateien aber doch vorhanden sind dann soll das Programm normal weiter laufen und weiter Befehle ausführen. MFG |
Re: Schleife
Delphi-Quellcode:
function DeletingFiles(Filename:String):Boolean;
begin result:=false; // Datei nicht gefunden for HDD:='C' to 'Z' do if SearchForFile(HDD + ':\', Filename, APathFound) then begin repeat DeleteFile(ApathFound+Filename); // Datei gefunden WriteLn(myFile, ':: '+ Filename + ' available on: ' + APathFound); // wird geloescht result:=true; // Ergebnis -> true break; // Schleife wird abgebrochen until not SearchForFile(HDD + ':\', Filename, APathFound); end else begin WriteLn(myFile, Filename + ' is not available on ', HDD); // Datei wurde nicht gefunden, Schleife laeuft weiter result:=false; end; end;
Delphi-Quellcode:
mein letzter Versuch
if not DeletingFile('test.dat') then // Es wurden alle Laufwerke durchsucht, die Datei wurde nicht gefunden
close; else // die Datei wurde gefunden ... Gruesse Klaus |
Re: Schleife
Danke das du dir soviel Mühe gemacht hast aber das ist nicht leider nicht was ich möchte. Ich bräuchte wohl ein end. aber das soll nur funktionieren wenn eine Datei nicht da ist =)
|
Re: Schleife
Was macht denn eigentlich
Delphi-Quellcode:
genau ?
SearchForFile(HDD + ':\', Filename, APathFound)
Die Funktion sucht unterhalb eines bestimmten Verzeichnisses (HDD + ':\') rekursiv nach Filename und liefert den 1. Treffer in APathFound, oder ?? Ist es denn nicht ziemlich ungeschickt, nur den 1. Treffer zu liefern? Wäre es nicht viel besser ALLE gefundenen Dateien mit komplettem Pfad in einer StringListe zu sammeln. Wenn man eine Datei löschen möchte, braucht man auch nicht nochmals nachsehen, ob sie wirklich gelöscht ist, sondern man wertet einfach das Result von DeleteFile aus! |
DP-Maintenance
Dieses Thema wurde von "r_kerber" von "Programmieren allgemein" nach "Object-Pascal / Delphi-Language" verschoben.
Ist eindeutig ein Delphi-Problem |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:32 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