Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Problem mit FindFirst, FindNext und TFileStream (https://www.delphipraxis.net/136149-problem-mit-findfirst-findnext-und-tfilestream.html)

AJ_Oldendorf 24. Jun 2009 13:27


Problem mit FindFirst, FindNext und TFileStream
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo zusammen,
ich habe mal ein kleines Beispielprogramm gemacht um mein Problem zu erklären.

Zwei leere Textdateien werden unter C:\ (im Root) angelegt.
Es wird mit Findfirst und Findnext nach den beiden Dateien gesucht (nichts weiter gemacht) und mit FindClose wieder zugemacht.

Wenn ich jetzt mit TFileStream.Create auf die Dateien zugreifen will (natürlich nacheinander), dann geht es bei der einen Datei und bei der anderen nicht. Er geht bei der zweiten Datei ins Except rein...

Habt ihr eine Idee, warum das schief geht?
Das sieht ja so aus, als ob das FindClose sich nicht auf alle Dateien auswirkt, die es vorher mit FindFirst und FindNext bekommen hat.

Ich hoffe, ihr könnt mir da helfen.

Viele Grüße
Alex

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  F : TSearchRec;
  Success : Boolean;
begin
  try
    if FindFirst('C:\*.txt', faAnyFile, F)= 0 then
    begin
      Success := True;

      while Success do
      begin
        //Mach irgendwas mit der Datei...

        Success := FindNext(F) = 0;
      end;
    end;
  finally
    FindClose(F);
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  SL : TStringList;
begin
  SL := TStringList.Create;
  try
    SL.SaveToFile('C:\1.txt');
  finally
    SL.Free;
  end;

  SL := TStringList.Create;
  try
    SL.SaveToFile('C:\2.txt');
  finally
    SL.Free;
  end;
end;

procedure TForm1.Button3Click(Sender: TObject);
var
  F : TSearchRec;
  TmpStream : TFileStream;
begin
  try
    if FindFirst('C:\*.txt', faAnyFile, F)= 0 then
    begin
      try
        { Versuchen, die Datei öffnend zu lesen }
        TmpStream := TFileStream.Create (F.Name, fmOpenRead);
      except
        Exit;
      end;

      TmpStream.Free;
    end;
  finally
    FindClose(F);
  end;
end;

quendolineDD 24. Jun 2009 13:29

Re: Problem mit FindFirst, FindNext und TFileStream
 
Fang doch mal ab, welche Exception Auftritt, bzw. welcher Fehlercode gesetzt wird. Einfach so kann man nicht sagen, was der Fehler ist.

Highttower 24. Jun 2009 13:32

Re: Problem mit FindFirst, FindNext und TFileStream
 
Man halte mich für Paranoid aber muss man nicht jede Klasse und das ist TSearchRec, nicht erst instanzieren? bevor man sie benutzt? Oder wird das in FindFile gemacht?

quendolineDD 24. Jun 2009 13:33

Re: Problem mit FindFirst, FindNext und TFileStream
 
TSearchRec ist nur ein Record und keine Klasse.

AJ_Oldendorf 24. Jun 2009 13:33

Re: Problem mit FindFirst, FindNext und TFileStream
 
Delphi-Quellcode:
try
  { Versuchen, die Datei öffnend zu lesen }
  TmpStream := TFileStream.Create (F.Name, fmOpenRead);
except
  aCardinal := GetLastError;
  ShowMessage(IntToStr(aCardinal));
  Exit;
end;
GetLastError liefert eine 2...

Viele Grüße
Alex

quendolineDD 24. Jun 2009 13:36

Re: Problem mit FindFirst, FindNext und TFileStream
 
So. Nun wäre der nächste Schritt, in der MSDN die Fehlercodes durchzuschauen und dann danach seine Rückschlüsse führen. Die stehen alle hier.
ERROR_FILE_NOT_FOUND
2 (0x2) The system cannot find the file specified.

AJ_Oldendorf 24. Jun 2009 13:41

Re: Problem mit FindFirst, FindNext und TFileStream
 
Dann liefert GetLastError etwas falsches.

Die Datei ist ja eindeutig da.
Da führt kein Weg dran vorbei!

Viele Grüße
Alex

Mithrandir 24. Jun 2009 13:43

Re: Problem mit FindFirst, FindNext und TFileStream
 
Zitat:

Zitat von AJ_Oldendorf
Dann liefert GetLastError etwas falsches.

GetLastError macht selten Fehler. :mrgreen:

Hast du dir im Debugger schonmal angesehen, was genau in F.Name steht?

himitsu 24. Jun 2009 13:46

Re: Problem mit FindFirst, FindNext und TFileStream
 
neee, siehe auch anderer Thread >>> relative Pfade

Delphi-Quellcode:
.     // vvvv
FindFirst('C:\*.txt', faAnyFile, F)= 0 then
    begin
      try
        { Versuchen, die Datei öffnend zu lesen }
        TmpStream := TFileStream.Create('C:\' + F.Name
                                     // ^^^^^^^

Fridolin Walther 24. Jun 2009 13:49

Re: Problem mit FindFirst, FindNext und TFileStream
 
Spoiler doch nicht alles :P.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:53 Uhr.
Seite 1 von 2  1 2      

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