Seite 1 von 1

if FileSize immer #true ?

Verfasst: 18.09.2012 18:01
von Sebastian
Ich habe mir angewöhnt alle Fehler mit if-Abfragen abzufangen (man will ja sauber programmieren). Nun macht mir FileSize() Probleme. Die einfache if-Abfrage wird immer ausgeführt, auch wenn FileSize -1 ergibt. Ist das ein Bug oder bin ich einfach gerade blind?
IF FileSize("bla.db") > 0 funktioniert übrigens... hmm.

Code: Alles auswählen

IF FileSize("bla.db")
debug FileSize("bla.db")
debug "Dieser Code wird ausgeführt, aber es gibt die Datei bla gar nicht..."
ELSE
debug "Datei existiert nicht"
ENDIF

Re: if FileSize immer #true ?

Verfasst: 18.09.2012 18:11
von c4s
IF überprüft nicht, ob ein Wert größer Null, sondern ungleich Null ist. Wie du dir selbst denken kannst, trifft dies bei -1 zu.

Re: if FileSize immer #true ?

Verfasst: 18.09.2012 18:12
von STARGÅTE
Wenn du "sauber" programmieren willst, solltest du auch "saubere" logische Aussagen vergleichen.

Code: Alles auswählen

IF FileSize("bla.db")
ist gleichbedeutend mit

Code: Alles auswählen

IF FileSize("bla.db") <> 0
somit arbeitet der Code richtig, denn auch -1 (oder -2) ist <> 0, und ergibt somit Wahr.
Nur weil du IF benutzt, heißt das nicht, dass du "fragst" ob die Funktion Erfolg hatte.
Andere Funktionen können auch 0 zurückgeben wenn sie erfolgreich waren.

Code: Alles auswählen

IF FileSize("bla.db") > 0
ist also die richtige Wahl, wenn du prüfen willst, ob die Datei existiert.

Re: if FileSize immer #true ?

Verfasst: 18.09.2012 18:27
von ts-soft
STARGÅTE hat geschrieben:

Code: Alles auswählen

IF FileSize("bla.db") > 0
ist also die richtige Wahl, wenn du prüfen willst, ob die Datei existiert.
So, und jetzt der Korintenkac..., auch eine Datei mit der Größe 0 ist existent!

Code: Alles auswählen

If FileSize("bla.db") >= 0

Re: if FileSize immer #true ?

Verfasst: 18.09.2012 18:28
von Kevin
STARGÅTE hat geschrieben:Wenn du "sauber" programmieren willst, solltest du auch "saubere" logische Aussagen vergleichen.

Code: Alles auswählen

IF FileSize("bla.db")
ist gleichbedeutend mit

Code: Alles auswählen

IF FileSize("bla.db") <> 0
somit arbeitet der Code richtig, denn auch -1 (oder -2) ist <> 0, und ergibt somit Wahr.
Nur weil du IF benutzt, heißt das nicht, dass du "fragst" ob die Funktion Erfolg hatte.
Andere Funktionen können auch 0 zurückgeben wenn sie erfolgreich waren.

Code: Alles auswählen

IF FileSize("bla.db") > 0
ist also die richtige Wahl, wenn du prüfen willst, ob die Datei existiert.
ganz richtig wäre

Code: Alles auswählen

IF FileSize("bla.db") => 0
da die Datei auch leer sein könnte

mfg kevin

[EDIT] 22 Sekunden zu langsam

Re: if FileSize immer #true ?

Verfasst: 18.09.2012 18:52
von STARGÅTE
Ja klar, danke für die Richtigstellung

Re: if FileSize immer #true ?

Verfasst: 19.09.2012 17:32
von Sebastian
Okay. Danke. Ich dachte immer, dass #false <= 0 bedeutet. Nun ist mir alles klar. Vielen Dank für den Hinweis!

Re: if FileSize immer #true ?

Verfasst: 19.09.2012 17:34
von NicTheQuick
#False ist nur eine Konstante, die in dem Fall 0 ist. Wenn du also schreibst "If Funktion() = #False", dann wird einfach nur geprüft, ob der Rückgabewert der Funktion 0 war, weil zur Kompilierungszeit #False durch eine 0 ersetzt wird.