Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
player424
Anmeldungsdatum: 30.12.2008 Beiträge: 21
|
Verfasst am: 06.03.2010, 21:21 Titel: open legt Datei nicht an -> Illegal function call |
|
|
Hi leute,
folgende Zeile funktioniert nicht wie sie sollte:
Code: |
open newFile for output as #o
|
newFile ist eine string variable (enthält gültigen dateinamen) und o ist eine integer Variable, welche mit freefile belegt ist. Wenn ich das ganze als funktion aufrufe, sehe ich, dass diese 1 zurück gibt, was laut der Tabelle in der Referenz Illegal function call bedeutet. Was mache ich falsch?
Grüsse
player424 |
|
Nach oben |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
Verfasst am: 06.03.2010, 22:20 Titel: |
|
|
Hallo,
da hätte ich verschiedene Vermutungen, woran es liegen könnte.
Vermutung 1: Kann es sein, dass du das Dateihandle o "recycelst"? Du musst nämlich vor jeder OPEN-Anweisung erneut FREEFILE zuweisen, weil du sonst nicht sicher sein kannst, dass das Handle noch verfügbar ist. Einmal am Anfang des Codes FREEFILE zuzuweisen und später einfach immer wieder das Handle zu nutzen, könnte Probleme verursachen:
Code: | DIM AS INTEGER a, b
a = FREEFILE
OPEN "TEST0000.TXT" FOR OUTPUT AS #a
PRINT #a, "Hallo"
CLOSE #a
b = FREEFILE
OPEN "TEST0001.TXT" FOR OUTPUT AS #b
PRINT #b, "Welt"
OPEN "TEST0002.TXT" FOR OUTPUT AS #a ' => Hier passiert's!
' a haette vorher erneut FREEFILE zugewiesen bekommen müssen.
PRINT #a, "Das ist ein Test."
CLOSE #a, #b
SLEEP |
Ergebnis:
Code: | Aborting due to runtime error 1 (illegal function call) at line 9 of C:\FreeBASIC\test.bas() |
Vermutung 2: Holst du möglicherweise 2 Dateihandles direkt hintereinander ab, ohne zwischendurch OPEN auszuführen?
Beispiel:
Code: | DIM AS INTEGER a, b
a = FREEFILE
b = FREEFILE
OPEN "X.TXT" FOR OUTPUT AS #a
OPEN "Y.TXT" FOR OUTPUT AS #b |
Das würde einen Fehler verursachen, weil b das gleiche Handle zugewiesen wird wie a. Zum Zeitpunkt der Zuweisung wurde nämlich noch kein einziges Dateihandle durch OPEN belegt. Richtig wäre in dem Fall:
Code: | DIM AS INTEGER a, b
a = FREEFILE
OPEN "X.TXT" FOR OUTPUT AS #a
b = FREEFILE
OPEN "Y.TXT" FOR OUTPUT AS #b |
Vermutung 3: Ist der Dateiname im String newFile vielleicht ungültig?
Viele Grüße!
Sebastian _________________
Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen! |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 06.03.2010, 22:40 Titel: |
|
|
Zitat: | Wenn ich das ganze als funktion aufrufe.. |
Wie rufst du das als Funktion auf, schreib mal ein Beispiel? _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
player424
Anmeldungsdatum: 30.12.2008 Beiträge: 21
|
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 07.03.2010, 11:05 Titel: |
|
|
Richtig, aber achte auf die Klammern und "AS INPUT"! _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
|