![]() |
Texdatei öffen
Hallo,
ich möchte eine vorhandene Textdatei nur zum lesen öffen, gleichzeitig soll aber ein anderes Programm in die Datei schreiben dürfen. Wie ich es jetzt mache, funktioniert es nicht, weil das andere Programm nicht in die Datei schreiben kann.
Delphi-Quellcode:
Was mache ich falsch?
OpenDialog1.Filter := 'DRM Log Files|*.log;*.txt;*.bak|All Files|*.*';
if not OpenDialog1.Execute then Exit; Filemode:= fmOpenRead or fmShareCompat; {$I-} AssignFile(f, OpenDialog1.FileName); Reset(f); {$I+} |
Re: Texdatei öffen
Tag :hi:
Erstmal: Garnicht :mrgreen: -> Du kannst eine Datei nicht mit zwei Programmen gleichzeitig bearbeiten. Frage: Wozu soll dass den gut sein? Bei sowas kommt meistens (Un)Kraut hinten raus. Du könntest evt. eine Art "Buffer" dazwischen schieben. Jedes Programm bearbeitet die Datei(ohne direkt in die Datei zu schreiben!) und am schluss wird gespeichert... mfg edit(2): [ot]
Delphi-Quellcode:
vofür sind diese Befehele?
{$I-}
{$I+} [/ot] |
Re: Texdatei öffen
Zitat:
|
Re: Texdatei öffen
Es sollen ja nicht beide Programme reinschreiben. Also nochmal: Ich will nur lesen. Das andere Programm soll aber reinschreiben dürfen, währen die Datei von meinem Programm geöffnet ist. Was das andere Programm dann neu reinschreibt, interessiert mich nicht. Das Problem ist nur, dass mein Programm die Datei als Erstes öffnet.
|
Re: Texdatei öffen
Warum liest du die Datei nicht ein und schließt sie danach wieder, bspw. mit einer StringList, oder einem FileStream?
MfG Pr0g |
Re: Texdatei öffen
Ich könnte auch ne kopie erstellen und die dann auslesen, möchte ich aber nicht, da dies zu lange dauern würde. Die text Datei kann schonmal 5-10Mb groß werden.
Also nochmal mein Problem: Filemode scheint nicht für Textdateien zu gelten. Wie öffne ich eine Textdatei readonly und das sie von anderen gleichzeitig beschrieben werden kann? Ich hätte gedacht, dass das ganz einfach mit Filemode geht. |
Re: Texdatei öffen
Hallo carknue,
fmShareCompat wird heute nur noch in den seltensten Fällen gebraucht (compatible bezieht sich auf DOS und SHARE.EXE). Mach es besser so:
Delphi-Quellcode:
Grüße vom marabu
var
fTExt: TextFile; begin AssignFile(fText, ''); TTextRec(fText).Mode := fmOpenRead or fmShareDenyNone; TTextRec(fText).Mode := fmOpenWrite or fmShareDenyWrite; Reset(fText); CloseFile(fText); end. |
Re: Texdatei öffen
So kriege ich die Datei überhaupt nicht auf. Error 102 Datei wird schon benutzt?!? :gruebel:
|
Re: Texdatei öffen
Hast du auch zwischen die > '' < den Dateinamen geschrieben? :wink:
mfg |
Re: Texdatei öffen
Ja klar. Die error Abfang routine spricht bei jedem Versuch die Datei zu öffen an, obwohl sie von keinem anderen Programm geöffnet ist. Code sieht so aus:
Delphi-Quellcode:
IOResult ist <>0
OpenDialog1.Filter := 'DRM Log Files|*.log;*.txt;*.bak|All Files|*.*';
if not OpenDialog1.Execute then Exit; ListBox1.Clear; paint; //Filemode:= fmOpenRead or fmShareCompat; Button1.Enabled := False; Button3.Enabled := False; Button5.Enabled := False; {$I-} AssignFile(f, OpenDialog1.FileName); TTextRec(f).Mode := fmOpenRead or fmShareDenyNone; TTextRec(f).Mode := fmOpenWrite or fmShareDenyWrite; Reset(f); {$I+} if IOResult = 0 then FileIsThere := true else FileIsThere := false; if FileIsThere then begin . . . Mit filemode läßt sich die Datei wenigstens öffnen... :gruebel: |
Re: Texdatei öffen
Hallo carknue,
eventuell geht das mit einer untypisierten Datei und Blockread/Blockwrite. so hatte ich zu sehligen DOS-Zeiten DBase-Dateien gelesen und geschrieben. mfg BrunoT |
Re: Texdatei öffen
Ich habe den Fehler 102 nachvollzogen und daraufhin mein Gedächtnis anhand meiner Unterlagen aufgefrischt. Ich habe TTextRec.Mode in meinem Beitrag weiter oben völlig falsch interpretiert. Diese Variable dient lediglich der Aufnahme der magic codes, mit denen Assign, Reset, Append und Rewrite der Open-Funktion des Textfile-Gerätetreibers ihre speziellen Wünsche signalisieren.
Für die korrekte Verwendung der share modi muss (und kann auch) ein eigener Gerätetreiber implementiert werden. Borland hat das Vorgehen hierzu in den Turbo Pascal Handbüchern der DOS-Versionen beschrieben, wenn ich mich recht erinnere. TextFile stellt letzten Endes eine Art Objekt dar, mit einigen Objektvariablen (Buffer, BufferSize, etc) und vier Methoden (Open, Close, Flush, InOut). Die Implementierung erfolgt aber nicht mit OOP-Sprachmitteln. In der Dokumentation von Delphi 7, die mir vorliegt, rät Borland generell von der Verwendung von Dateivariablen ab und verweist auf FileStreams als Mittel der Wahl. Es würde mich nicht überraschen, wenn eine der neueren Versionen diesen Ballast aus DOS-Zeiten über Bord geworfen hätte. Übrigens ist auch meine Aussage zu fmShareCompat nicht ganz korrekt gewesen. Der Kompatibilitätsmodus wurde zu Zeiten von DOS 3 benötigt, um FCB-basierte Dateioperationen aufrecht zu erhalten, wie sie unter DOS 1.1 und DOS 2.1 üblich waren. Grüße vom marabu |
Re: Texdatei öffen
Man kann die Datei auch 'als Kopie' öffnen. Heißt, von der Datei wird eine temporäre Kopie angelegt, welche dann geöffnet werden kann. Nach dem Schließen wird sie gelöscht.
Ich kann es jetzt gerade nicht prüfen, aber wenn man eine Textdatei in ein Memo lädt, kann man sie anderweitig bearbeiten. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:18 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