Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   FindFirst und Inhalt von txt Datei in Stringlist laden (https://www.delphipraxis.net/203241-findfirst-und-inhalt-von-txt-datei-stringlist-laden.html)

zaphood 27. Jan 2020 19:44


FindFirst und Inhalt von txt Datei in Stringlist laden
 
Hi,
ich habe hier zwei Programme die für sich alleine funktionieren. Jetzt sollen die verheiratet werden und die die vertragen sich nicht.

Hiermit suche ich nacheinander alle txt Dateinen, schreibe den Namen ins Memo und lösche danach.
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
 var
     rec : tsearchrec;
     Datum   : String;
 begin
    if FindFirst('f:\*.txt', faAnyFile, rec) = 0 then
    try
      repeat
         Datum := FormatDateTime('yyyy_mm_dd__hh_mm_ss', Now);
         Anzahl := Anzahl+1;
         Label2.Caption := IntToStr(Anzahl);
         Memo1.Lines.add(Datum+ ' '+ rec.Name);
         deletefile('f:\'+rec.Name);
      until FindNext(rec) <> 0;
    finally
      FindClose(rec);
    end;
 end;

Das ist Ziel den Inhalt der gefundenen txt Datei in eine Stingliste zu laden, was die Fehlermeldung Unable to open file"xxxx.txt" verursacht. Hat jemand eine Idee was sich beißt?
Delphi-Quellcode:
begin
  sl := TStringList.Create;
  if (FindFirst('f:\*.txt', faAnyFile, rec) = 0) then
    try
     sl.LoadFromFile(rec.Name);

DieDolly 27. Jan 2020 19:56

AW: FindFirst und Inhalt von txt Datei in Stringlist laden
 
Las dir mal rec.Name ausgeben. Wenn ich mich nicht irre müsstest du dann sehen was das Problem ist.

p80286 27. Jan 2020 20:31

AW: FindFirst und Inhalt von txt Datei in Stringlist laden
 
[QUOTE=zaphood;1456113]

Das ist Ziel den Inhalt der gefundenen txt Datei in eine Stingliste zu laden, was die Fehlermeldung Unable to open file"xxxx.txt" verursacht. Hat jemand eine Idee was sich beißt?

Hast Du die notwendigen Rechte? kann es sein das die Datei exklusiv geöffnet wurde?

Gruß
K-H

BerndS 27. Jan 2020 20:50

AW: FindFirst und Inhalt von txt Datei in Stringlist laden
 
Mit
Delphi-Quellcode:
sl.LoadFromFile('f:/' + rec.Name);
sollt es klappen. Es fehlt der Pfad :!:

zaphood 28. Jan 2020 05:40

AW: FindFirst und Inhalt von txt Datei in Stringlist laden
 
Guten Morgen und danke für die Tipps.:thumb:

@Bernd: es klappt mit der Pfadangabe:-D
@DieDolly: Mit
Delphi-Quellcode:
ShowMessage(rec.Name);
bekomme ich die Textdatei angezeit.

Mit
Delphi-Quellcode:
sl.LoadFromFile('SPC.txt');
in einem anderen Programm lade ich eine txt Datei aus dem Programmverzeichnis. Wusste nicht das die Syntax für die Übergabe von
Delphi-Quellcode:
FindFirst/tsearchrec
an die
Delphi-Quellcode:
Stringlist
anders lauten muss.

Luckie 28. Jan 2020 06:29

AW: FindFirst und Inhalt von txt Datei in Stringlist laden
 
Weil das Arbeitsverzeichnis bei dem anderen Programm zufällig stimmt. Benutze mal einen Öffnen-Dialog und öffne mal eine Datei aus einem anderen Ordner. Da wird dir das gleiche passieren.

DieDolly 28. Jan 2020 06:32

AW: FindFirst und Inhalt von txt Datei in Stringlist laden
 
Zitat:

bekomme ich die Textdatei angezeit.
Genau genommen ist das falsch. Du bekommst einen Dateinamen ohne Pfad angezeigt. Und das ist der Fehler.

Wenn SPC.txt im selben Verzeichnis liegt wie deine Exe-Datei, dann funktioniert das.
Logischerweise, Windows kann ja nicht wissen wo die Datei ist (es könnte sie hunderte male geben mit demselben Namen), funktioniert das nicht mehr, wenn SPC.txt woanders liegt.

hoika 28. Jan 2020 07:35

AW: FindFirst und Inhalt von txt Datei in Stringlist laden
 
Hallo,
Zitat:

Wenn SPC.txt im selben Verzeichnis liegt wie deine Exe-Datei, dann funktioniert das.
Es sei denn, das aktuelle Verzeichnis (ChDir, SetCurrentDirectory) wurde geändert.

himitsu 28. Jan 2020 09:26

AW: FindFirst und Inhalt von txt Datei in Stringlist laden
 
Zitat:

Zitat von zaphood (Beitrag 1456134)
Mit
Delphi-Quellcode:
sl.LoadFromFile('SPC.txt');
in einem anderen Programm lade ich eine txt Datei aus dem Programmverzeichnis. Wusste nicht das die Syntax für die Übergabe von
Delphi-Quellcode:
FindFirst/tsearchrec
an die
Delphi-Quellcode:
Stringlist
anders lauten muss.

Das tut es auch nicht, denn an FindFirst übergibst du die Suchanfrage mit Pfad,
SearchReg.Name liefert immer nur den Dateinamen/Verzeichnissnamen ohne Pfad
und an das LoadFromFile übergibst DU es dann ohne Pfad.
PS: Beim DeleteFile hattest du es doch auch richtig gemacht. :zwinker:

Um Daniel und die anderen nochmal zusammenzufassen.
Ohne Pfad, bzw. mit relativem Pfad geht es immer vom aktuellen Arbeitsverzeichnis aus
und das muß nicht dem Programmverzeichnis entsprechen.

In der CMD tut es das oft, weil dort ja öfters die Programme im auch im aktuellen Verzeichnis gestartet werden.
Programm mit absolutem/relativem Pfad oder aus Suchpfaden starten und schon stimmt das auch doch nicht mehr.
Ebenso bei Links. Die bekommen beim erstellen oft standardmäßig den Pfad der gestarteten Datei (wenn man das Feld leer lässt), aber das muß nicht so sein.

Und als Tipp: Wenn man einen Öffnen-Dialog verwendet, dann stellt der gern das Arbeitsverzeichnis auf das ausgewählte Verzeichnis um.



Fazit, was auch überall immer wieder geprädigt wird: Man soll keine relativen Pfade verwenden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:59 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