Textdatei offen? [gelöst]

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
diogenes
Beiträge: 188
Registriert: So 11. Jul 2010, 18:39
OS, Lazarus, FPC: Linux
CPU-Target: 64 Bit
Wohnort: Wien
Kontaktdaten:

Textdatei offen? [gelöst]

Beitrag von diogenes »

Ich würde gerne feststellen, ob bestimmte Textdateien, spezifisch Output und StdErr, überhaupt zum Schreiben offen sind., Wie geht das am besten, bitte?
Zuletzt geändert von diogenes am Di 4. Mai 2021, 17:03, insgesamt 1-mal geändert.
Ceterum censeo computatores per Pascal docendos esse.

Benutzeravatar
Winni
Beiträge: 668
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.0.12, fpc 3.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: Textdatei offen?

Beitrag von Winni »

Hi!

Output und StdErr sind immer offen per Definition. Das braucht man nicht testen.

Winni

diogenes
Beiträge: 188
Registriert: So 11. Jul 2010, 18:39
OS, Lazarus, FPC: Linux
CPU-Target: 64 Bit
Wohnort: Wien
Kontaktdaten:

Re: Textdatei offen?

Beitrag von diogenes »

Auch unter Wind...ows? Zu XP-Zeiten hatte ich feststellen müssen, dass man da extra aufmachen musste. Außer ich erinnere mich falsch.
Ceterum censeo computatores per Pascal docendos esse.

Benutzeravatar
Winni
Beiträge: 668
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.0.12, fpc 3.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: Textdatei offen?

Beitrag von Winni »

Hi!

Auch unter Windows. Auch unter XP. Auch unter ... was hättest Du denn gerne? BSD? Mac? ....

Winni

diogenes
Beiträge: 188
Registriert: So 11. Jul 2010, 18:39
OS, Lazarus, FPC: Linux
CPU-Target: 64 Bit
Wohnort: Wien
Kontaktdaten:

Re: Textdatei offen?

Beitrag von diogenes »

Passt schon. Wenn die immer offen sind, sind sie halt immer offen. Hab ich mich eben falsch erinnert.

Danke :)
Ceterum censeo computatores per Pascal docendos esse.

Socke
Lazarusforum e. V.
Beiträge: 2902
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Textdatei offen?

Beitrag von Socke »

Winni hat geschrieben:
So 2. Mai 2021, 20:28
Auch unter Windows. Auch unter XP. Auch unter ... was hättest Du denn gerne? BSD? Mac? ....
Dies gilt aber nur für Konsolenanwendungen. Ist der Compilerschalter -WG (Win32-GUI-Anwendung) gesetzt, sind StdOut/-In/-Err nicht automatisch geöffnet.

Edit: In einer Win32-GUI-Anwendung muss man die Verbindung zur Konsole selbst herstellen.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

diogenes
Beiträge: 188
Registriert: So 11. Jul 2010, 18:39
OS, Lazarus, FPC: Linux
CPU-Target: 64 Bit
Wohnort: Wien
Kontaktdaten:

Re: Textdatei offen?

Beitrag von diogenes »

Ah ja. Das war's also. Und wie stelle ich zur Laufzeit dann fest, ob die besagten Textdateien offen sind?
Ceterum censeo computatores per Pascal docendos esse.

Socke
Lazarusforum e. V.
Beiträge: 2902
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Textdatei offen?

Beitrag von Socke »

diogenes hat geschrieben:
So 2. Mai 2021, 21:59
Ah ja. Das war's also. Und wie stelle ich zur Laufzeit dann fest, ob die besagten Textdateien offen sind?
Ich denke, es ist sicher, den Zustand je nach Betriebssystem anzunehmen. Im Wesentlichen hängt es ja nicht von der Laufzeit sondern von der Compilezeit ab.
Alternativ kannst du einfach fehlertolerant auf die Dateien zugreifen. Falls du einen Fehler erhälst, ist die Datei entweder nicht offen oder das Zielvolume voll (usw.).
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

diogenes
Beiträge: 188
Registriert: So 11. Jul 2010, 18:39
OS, Lazarus, FPC: Linux
CPU-Target: 64 Bit
Wohnort: Wien
Kontaktdaten:

Re: Textdatei offen?

Beitrag von diogenes »

Das mit der Fehlertoleranz habe ich mir schon überlegt. Ich wollte (auch) wissen, ob's da eine elegantere Methode gibt :)
Ceterum censeo computatores per Pascal docendos esse.

PascalDragon
Beiträge: 291
Registriert: Mi 3. Jun 2020, 07:18
OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
CPU-Target: Aarch64 bis Z80 ;)
Wohnort: München

Re: Textdatei offen?

Beitrag von PascalDragon »

Gibt es:

Code: Alles auswählen

program tfiletest;

begin
  if TextRec(Output).Mode = fmClosed then
    ExitCode := 1
  else
    ExitCode := 2;
end.
Je nachdem, ob du (unter Windows) mit oder ohne -WG kompilierst, ist der Exitcode (echo %ERRORLEVEL%)entweder 1 oder 2 (du musst im Fall von -WG mit start /WAIT tfiletest.exe starten, da sonst die Anwendung von der Kommandozeile abgetrennt wird und der Exitcode nicht durchkommt).

Der Trick funktioniert übrigens mit jedem TextFile (für file musst du FileRec nehmen, da gilt aber das gleiche).
FPC Compiler Entwickler

diogenes
Beiträge: 188
Registriert: So 11. Jul 2010, 18:39
OS, Lazarus, FPC: Linux
CPU-Target: 64 Bit
Wohnort: Wien
Kontaktdaten:

Re: Textdatei offen?

Beitrag von diogenes »

Danke, sieht gut aus!

Wenn der Wert also fmClosed ist, dann müsste man auch mit Assign zuweisen, oder? Meines Wissens nach ist der Modus auch fmClosed nach einem Assign, aber vor Rewrite, Reset oder Append. Oder irre ich mich da? Wenn nicht, was ist der Modus für nicht zugewiesene Texdateien?
Ceterum censeo computatores per Pascal docendos esse.

PascalDragon
Beiträge: 291
Registriert: Mi 3. Jun 2020, 07:18
OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
CPU-Target: Aarch64 bis Z80 ;)
Wohnort: München

Re: Textdatei offen?

Beitrag von PascalDragon »

diogenes hat geschrieben:
Mo 3. Mai 2021, 10:11
Danke, sieht gut aus!

Wenn der Wert also fmClosed ist, dann müsste man auch mit Assign zuweisen, oder? Meines Wissens nach ist der Modus auch fmClosed nach einem Assign, aber vor Rewrite, Reset oder Append. Oder irre ich mich da? Wenn nicht, was ist der Modus für nicht zugewiesene Texdateien?
Der Zustand vor einem Assign-Aufruf ist undefiniert, da ein TextRec oder FileRec nicht automatisch initialisiert wird. Eine Datei wird erst durch den Aufruf von Reset, Rewrite oder Append geöffnet (eine Assign-Funktion setzt normal nur die OpenFunc-Funktion des TextRec/FileRec und eben Mode auf fmClosed (und was halt noch nötig ist, damit die OpenFunc-Funktion dann korrekt funktioniert)).
FPC Compiler Entwickler

diogenes
Beiträge: 188
Registriert: So 11. Jul 2010, 18:39
OS, Lazarus, FPC: Linux
CPU-Target: 64 Bit
Wohnort: Wien
Kontaktdaten:

Re: Textdatei offen?

Beitrag von diogenes »

Verstehe.
Ceterum censeo computatores per Pascal docendos esse.

diogenes
Beiträge: 188
Registriert: So 11. Jul 2010, 18:39
OS, Lazarus, FPC: Linux
CPU-Target: 64 Bit
Wohnort: Wien
Kontaktdaten:

Re: Textdatei offen?

Beitrag von diogenes »

Problem gelöst. Durch Euch inspiriert, hae ich ein wenig im Internetz gewühlt und gefunden, dass Windows eine AllocConsole-Funktion hat, die die Kanäle öffnet. Alles gut, danke! :)
Ceterum censeo computatores per Pascal docendos esse.

PascalDragon
Beiträge: 291
Registriert: Mi 3. Jun 2020, 07:18
OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
CPU-Target: Aarch64 bis Z80 ;)
Wohnort: München

Re: Textdatei offen?

Beitrag von PascalDragon »

diogenes hat geschrieben:
Di 4. Mai 2021, 17:03
Problem gelöst. Durch Euch inspiriert, hae ich ein wenig im Internetz gewühlt und gefunden, dass Windows eine AllocConsole-Funktion hat, die die Kanäle öffnet. Alles gut, danke! :)
Dann musst du aber dennoch manuell Output und StdErr öffnen, da diese nichts von deiner Nutzung einer Windows Funktion mitbekommen. Außerdem führt das glaube ich dazu, dass ein neues Konsolenfenster aufgemacht wird, wenn du aus einer Konsole heraus startest, da die eigentliche Anwendung von der Konsole bereits abgelöst wurde (und PowerShell statt CMD hat auch noch ihren eigenen Spaß mitgebracht... :roll: )
FPC Compiler Entwickler

Antworten