Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Texdatei öffen (https://www.delphipraxis.net/46545-texdatei-oeffen.html)

carknue 26. Mai 2005 23:54


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:
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+}
Was mache ich falsch?

mr47 27. Mai 2005 00:07

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:
{$I-} 
{$I+}
vofür sind diese Befehele?

[/ot]

Luckie 27. Mai 2005 00:14

Re: Texdatei öffen
 
Zitat:

Zitat von mr47
[ot]
Delphi-Quellcode:
{$I-} 
{$I+}
vofür sind diese Befehele?

Das sind Kompilerschalter und die findest du alle in der Hilfe.

carknue 27. Mai 2005 00:17

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.

Pr0g 27. Mai 2005 00:59

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

carknue 27. Mai 2005 10:08

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.

marabu 27. Mai 2005 11:40

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:
var
  fTExt: TextFile;

begin
  AssignFile(fText, '');
  TTextRec(fText).Mode := fmOpenRead or fmShareDenyNone;
  TTextRec(fText).Mode := fmOpenWrite or fmShareDenyWrite;
  Reset(fText);
  CloseFile(fText);
end.
Grüße vom marabu

carknue 27. Mai 2005 19:17

Re: Texdatei öffen
 
So kriege ich die Datei überhaupt nicht auf. Error 102 Datei wird schon benutzt?!? :gruebel:

mr47 27. Mai 2005 21:58

Re: Texdatei öffen
 
Hast du auch zwischen die > '' < den Dateinamen geschrieben? :wink:

mfg

carknue 27. Mai 2005 22:13

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:
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
.
.
.
IOResult ist <>0
Mit filemode läßt sich die Datei wenigstens öffnen... :gruebel:


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:38 Uhr.
Seite 1 von 2  1 2      

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