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
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...
> 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
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...
Danke für euere Antworten, ich werde es gleich
umschreiben und Testen.
Gruß
Michael
>-----Originalnachricht-----
>.
>
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.
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...