![]() |
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; |
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.
|
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?
|
Re: Problem mit FindFirst, FindNext und TFileStream
TSearchRec ist nur ein Record und keine Klasse.
|
Re: Problem mit FindFirst, FindNext und TFileStream
Delphi-Quellcode:
GetLastError liefert eine 2...
try
{ Versuchen, die Datei öffnend zu lesen } TmpStream := TFileStream.Create (F.Name, fmOpenRead); except aCardinal := GetLastError; ShowMessage(IntToStr(aCardinal)); Exit; end; Viele Grüße Alex |
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.
![]() ERROR_FILE_NOT_FOUND 2 (0x2) The system cannot find the file specified. |
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 |
Re: Problem mit FindFirst, FindNext und TFileStream
Zitat:
Hast du dir im Debugger schonmal angesehen, was genau in F.Name steht? |
Re: Problem mit FindFirst, FindNext und TFileStream
neee, siehe auch anderer Thread >>>
![]()
Delphi-Quellcode:
. // vvvv
FindFirst('C:\*.txt', faAnyFile, F)= 0 then begin try { Versuchen, die Datei öffnend zu lesen } TmpStream := TFileStream.Create('C:\' + F.Name // ^^^^^^^ |
Re: Problem mit FindFirst, FindNext und TFileStream
Spoiler doch nicht alles :P.
|
Re: Problem mit FindFirst, FindNext und TFileStream
Habs jetzt so angepasst und in FehlerCnt steht am Ende eine 2...
Delphi-Quellcode:
F.Name liefert im ersten Durchlauf 1.txt und im zweiten Durchlauf 2.txt.
procedure TForm1.Button3Click(Sender: TObject);
var F : TSearchRec; TmpStream : TFileStream; aCardinal : Cardinal; Success : Boolean; FehlerCnt : Integer; begin FehlerCnt := 0; try if FindFirst('C:\*.txt', faAnyFile, F)= 0 then begin Success := True; while Success do begin //Mach irgendwas mit der Datei... TmpStream := Nil; try { Versuchen, die Datei öffnend zu lesen } TmpStream := TFileStream.Create (F.Name, fmOpenRead); except Inc(FehlerCnt); end; Success := FindNext(F) = 0; end; end; finally FindClose(F); end; end; Sieht also richtig aus. Viele Grüße Alex |
Re: Problem mit FindFirst, FindNext und TFileStream
ich denk wir haben uns in dem einem Thread geeinigt allen nur noch fertige Codes zu geben? :gruebel:
Am Besten hier melden sich auch noch ein paar Lehrer an und geben uns die Hausaufgaben, damit wir's einfacher haben, wenn wer fragt :angel2: Nja, mal im Ernst ... in .Name steht halt nur der Dateiname drin und sonst nix, also immer schon den Pfad mit dazupacken. [add] Zitat:
Code:
procedure TForm1.Button2Click(Sender: TObject);
SL.SaveToFile([color=#ff0000][b]'C:\1.txt'[/b][/color]); procedure TForm1.Button3Click(Sender: TObject); if FindFirst('C:\*.txt', faAnyFile, F)= 0 then TmpStream := TFileStream.Create([color=#ff0000][b]'1.txt'[/b][/color], fmOpenRead); |
Re: Problem mit FindFirst, FindNext und TFileStream
Alles klar,
ich teste das mal :-) Mist, das hatte ich gar nicht gesehen... :wall: Trotzdem danke GEHT JETZT :-) |
Re: Problem mit FindFirst, FindNext und TFileStream
Zitat:
|
Re: Problem mit FindFirst, FindNext und TFileStream
Ist dir der Fehler nun aufgefallen? Dein Filestream befindet sich in einem gänzlich anderem Pfad als wo du gesucht hast.
|
Re: Problem mit FindFirst, FindNext und TFileStream
Zitat:
|
Re: Problem mit FindFirst, FindNext und TFileStream
na gut, ich wußte ja was drin stehn müßte
und in F.Name stand auch der "richtige" Dateiname, wie ja schon bemerkt wurde :mrgreen: nja, nun geht's ja wieder :) und andere Suchende müssen nicht lange rumraten, was da drinsteht. :) |
Re: Problem mit FindFirst, FindNext und TFileStream
Dabei hab ich schon ne Brille auf uns erkenne trotzdem den richtigen Pfad nicht :-)
Naja, jetzt bin ich ein wenig schlauer :-) Danke nochmals Alex |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:49 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