Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Schleife (https://www.delphipraxis.net/87476-schleife.html)

-187- 1. Mär 2007 07:51


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

Ich hab es auch nich hinbekommen und brauche jetz eure Hilfe =) Danke

matashen 1. Mär 2007 07:55

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;

thkerkmann 1. Mär 2007 09:12

Re: Schleife
 
Hi,

wirklich besser ist das auch nicht :-)
Delphi-Quellcode:
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;
Gruss

-187- 1. Mär 2007 09:34

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:

-187- 1. Mär 2007 10:13

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;

thkerkmann 1. Mär 2007 11:16

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

-187- 1. Mär 2007 11:19

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

-187- 1. Mär 2007 11:24

Re: Schleife
 
Ein weiteres Problem besteht dadrin das ich den Exit nich hinkriege wenn eine File nicht vorhanden ist.

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);
end;
Also sowas wie
else
WriteLn(myFile, Filename + ' is not available on ', HDD) + Exit;

Klaus01 1. Mär 2007 11:54

Re: Schleife
 
Delphi-Quellcode:
else
WriteLn(myFile, Filename + ' is not available on ', HDD) + Exit;
Warum willst Du denn hier die Schleife verlassen.
Wenn Du da die for Schleife mit break verlaesst
kannst Du nicht sicher sein das alle Laufwerke durchsucht wurden.

Gruesse
Klaus

-187- 1. Mär 2007 12:01

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 ..

Klaus01 1. Mär 2007 12:08

Re: Schleife
 
Delphi-Quellcode:
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;
vielleicht geht es so?

Gruesse
KLaus

-187- 1. Mär 2007 12:14

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

Klaus01 1. Mär 2007 13:23

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:
if not DeletingFile('test.dat') then // Es wurden alle Laufwerke durchsucht, die Datei wurde nicht gefunden
  close;
else                                 // die Datei wurde gefunden
  ...
mein letzter Versuch

Gruesse
Klaus

-187- 1. Mär 2007 13:49

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 =)

shmia 1. Mär 2007 15:27

Re: Schleife
 
Was macht denn eigentlich
Delphi-Quellcode:
SearchForFile(HDD + ':\', Filename, APathFound)
genau ?
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 2. Mär 2007 13:16

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 04:32 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