TP: Findfirst Findnext Problem.

02/08/2009 - 19:02 von Martin Freiberg | Report spam
Hallo,

Ich habe da ein Problem mit Findfirst und Findnext.
Kann es sein das Findfirst unter Turbopascal 6.0 den aktuellen Pfad und
Laufwerk veràndert?

Das Programm hat beim Programmstart als aktuelles Laufwerk und
Verzeichnis D:\

Im Programm suche ich dann mit Findfirst nach dem vorkommen einer Datei
auf Laufwerk C: im Verzeichnis Daten

Beispiel:

VAR
SDatei:SEARCREC;
PfadDatei : string;

BEGIN
PfadDatei:='C:\DATEN\';
FindFirst (PfadDatei+'*.tmp', anyfile, SDatei);
While DosError = 0 Then BEGIN

TueDisDas(SDatei.name);

FindNext (SDatei);
END;
END;

Nach Aufruf dieses Beispiels ist der aktuelle Pfad und auch Laufwerk
verstellt und zeigt nach C:\DATEN\

Ich vermute das darin, da SearcRec.name auf eine Lànge von 12 Zeichen
definiert ist. Wo also sollte der Pfad bei dieser Funktion gespeichert sein?

Ist das Korrekt, das hier TP bzw. das DOS Dateisystem durch das
FindFirst den aktuellen Pfad und Laufwerk verbiegt?

Man also vor Findfirst immer mit GetDir(0,lala) das aktuelle Laufwerk
und Pfad speichern sollte/muss und nach Ende wieder mit ChDir (lala)
wieder herstellt?

Und wie ist das unter Freepascal? Das selbe Problem?

Dort ist RearcRec.name von der größe String. Dort also mit Pfad, oder
auch nur der Dateiname?

Gruß
Martin
 

Lesen sie die antworten

#1 Michael Fuchs
04/08/2009 - 21:53 | Warnen spam
Martin Freiberg schrieb:
[...]
Das Programm hat beim Programmstart als aktuelles Laufwerk und
Verzeichnis D:\

Im Programm suche ich dann mit Findfirst nach dem vorkommen einer Datei
auf Laufwerk C: im Verzeichnis Daten

Beispiel:

VAR
SDatei:SEARCREC;
PfadDatei : string;

BEGIN
PfadDatei:='C:\DATEN\';
FindFirst (PfadDatei+'*.tmp', anyfile, SDatei);
While DosError = 0 Then BEGIN



WHILE .. THEN ?!?
DO!

TueDisDas(SDatei.name);

FindNext (SDatei);
END;
END;

Nach Aufruf dieses Beispiels ist der aktuelle Pfad und auch Laufwerk
verstellt und zeigt nach C:\DATEN\



Was macht denn TueDisDas?

[...]
Und wie ist das unter Freepascal? Das selbe Problem?



Nein.

Dort ist RearcRec.name von der größe String. Dort also mit Pfad, oder
auch nur der Dateiname?


Auch nur Dateiname.

Dein Beispiel oben ist ja nicht funktionsfàhig. Wie sieht es denn in der
Praxis aus? Hast du die Suche wieder mit FindClose geschlossen?

Mit dem Testprogramm unterstehend, funktioniert es jedenfalls.

program test;
uses
Crt, SysUtils;

var
SDatei:TSearchRec;
PfadDatei : string;

begin
PfadDatei:='/home/pinky/';
FindFirst (PfadDatei+'*', faanyfile, SDatei);
repeat
WriteLn(SDatei.name);
until FindNext(SDatei)<>0;
FindClose(SDatei);
end.

mfg
Micha
Meine Wanderungen durch Realitàt und Cyberspace

auf --> http://www.michael-fuchs.net <--

Ähnliche fragen