Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

fwrite() und fclose() machen Probleme

5 views
Skip to first unread message

Michael Theis

unread,
Sep 6, 2001, 6:54:32 AM9/6/01
to
Tach' Füchse,

wenn ich mit fcreate('...') eine Datei anlege,
diese dann mit xx = fopen('...', 12) öffne, mit
fwrite(xx, '......') reinschreibe und dann mit
xx = fclose(xx) schließe habe ich zwei Probleme.

1. Die Datei wird nicht geschlossen, d. h. will
ich die Datei mit einem Editor öffnen sagt
das Betriebsystem -> die Datei ist von einer
anderen Applikation geöffnet.

2. Beende ich FoxPro ist die Datei leer

Was msche ich hier falsch?

Gruß
Michael Theis

Rouven Degen

unread,
Sep 6, 2001, 7:06:49 AM9/6/01
to
Hallo Michael,

da gibt es noch eine Option von fopen(), die den Pufferungsmodus der zu
öffnenden
Datei einstellt. Standardmässig ist ein Puffer eingestellt, sodass man die
Datei vor dem
Schliessen erst noch "flushen" muss. Wie ein TableUpdate().

Probier mal die Funktion fflush(nHandle)

Viele Grüße...

Rouven

"Michael Theis" <the...@human.de> schrieb im Newsbeitrag
news:1c76f01c136c2$4f17f510$b1e62ecf@tkmsftngxa04...

Hans-Peter Grözinger

unread,
Sep 6, 2001, 7:11:05 AM9/6/01
to
Hallo Michael !

> wenn ich mit fcreate('...') eine Datei anlege, diese dann mit xx =
> fopen('...', 12) öffne, mit fwrite(xx, '......') reinschreibe und
> dann mit xx = fclose(xx) schließe habe ich zwei Probleme.
>
> 1. Die Datei wird nicht geschlossen, d. h. will
> ich die Datei mit einem Editor öffnen sagt
> das Betriebsystem -> die Datei ist von einer
> anderen Applikation geöffnet.

Du öffnest die Datei schon beim fcreate, merkts dir aber nicht das
Dateihandle. Für dein anschließendes fclose verwendest du ein un-
gültiges Handle, da du mit dem fopen die Datei nicht öffnen kannst,
da schon geöffnet.
Prüfe mal mit disp stat ob eine Datei geöffnet ist (vom Benutzer
geöffnete Dateien).



> 2. Beende ich FoxPro ist die Datei leer

Mit fcreate hast du eine Datei erzeugt und geöffnet. Mit fopen möchtest
du selbige nochmals öffnen => geht nicht.
Das kannst du mit ferror überprüfen. Dein Schreibvorgang und das
Schließen der Datei geht ins leere => Datei leer.

> Was mache ich hier falsch?

Siehe oben.

Vorgehen beim Arbeiten mit Low-Level-Befehlen:

Beim Erzeugen mußt du dir das Handle der Datei merken:
lnHandle = FCREATE( "VERSION.TXT" ) Datei erzeugen und öffnen

Du mußt die Datei nicht explizit mit fopen öffnen. Wenn doch, dann mit
nHandle = FOPEN( "VERSION.TXT" ) && Datei öffnen

Schließen der Datei wie folgt:
FCLOSE( lnHandle ) && Und Datei wieder zumachen

--
MfG
Hans-Peter Grözinger

Holger Kamin

unread,
Sep 6, 2001, 7:13:12 AM9/6/01
to
Hallo Michael,

wenn Du die Befehle fcreate und fopen direkt hintereinander
benutzt, bekommst Du beim fopen einen Dateihandle -1 zurück,
da die Datei durch den fcreate bereits geöffnet ist.

richtig wäre
xx=fcreate('..')
=fwrite(xx,'..')
=fclose(xx)

Gruß
Holger Kamin


"Michael Theis" <the...@human.de> schrieb im Newsbeitrag
news:1c76f01c136c2$4f17f510$b1e62ecf@tkmsftngxa04...

Michael Theis

unread,
Sep 6, 2001, 7:39:13 AM9/6/01
to
Hallo Füchse!

Danke für euere Antworten, ich werde es gleich
umschreiben und Testen.

Gruß
Michael


>-----Originalnachricht-----

>.
>

Matthias Kahlert

unread,
Sep 6, 2001, 7:39:00 AM9/6/01
to
In article <1c76f01c136c2$4f17f510$b1e62ecf@tkmsftngxa04>,
the...@human.de says...

> wenn ich mit fcreate('...') eine Datei anlege,
> diese dann mit xx =3D fopen('...', 12) =F6ffne, mit

> fwrite(xx, '......') reinschreibe und dann mit
> xx =3D fclose(xx) schlie=DFe habe ich zwei Probleme.

FCREATE() liefert Dir bereits einen Dateihandle zurück. Die Datei wird
sofort geöffnet.

FOPEN() kann die Datei dann nicht mehr öffnen (da sie ja bereits mit
FCREATE() geöffnet ist) und liefert dann als Dateihandle die -1 zurück.

--
Matthias Kahlert - matt...@de-soc-mac.de - in...@matthias-kahlert.de
PGP-ID: 0x1BB5DA1C - ICQ: 40177948 - http://www.de-soc-mac.de

Smith & Wesson: The original point-and-click interface.

Klaus Sobel [MS]

unread,
Sep 10, 2001, 5:06:48 AM9/10/01
to
Hallo Michael,

verwendest Du eigentlich VFP 6.0 oder 7.0?

lnHnd1 = FCREATE("test.txt")
IF lnHnd1 < 0 THEN
MESSAGEBOX("Fehler beim Erstellen!")
ENDIF

lnHnd2 = FOPEN("test.txt", 2)
IF lnHnd2 < 0 THEN
MESSAGEBOX("Fehler beim Öffnen!")
ENDIF
FWRITE(lnHnd2, "Hallo")
FCLOSE(lnHnd2)

Bei VFP 6.0 bekommst Du beim Öffnen suaber einen Fehler (lnHnd2 = -1)

Bei VFP 7.0 ist jetzt auch möglich, Dateien mit FOPEN()/FCREATE() shared zu
öffnen,
da ist dann der 2. Zugriff mit FOPEN() möglich.

mit freundlichen Grüssen

Klaus Sobel

Microsoft Developer Support EMEA

Mit 6.0 sollte das zweimalige Öffnen eigentlich gar nicht funktioneiren


"Michael Theis" <the...@human.de> schrieb im Newsbeitrag
news:1c76f01c136c2$4f17f510$b1e62ecf@tkmsftngxa04...

0 new messages