if FileSize immer #true ?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Sebastian
Beiträge: 322
Registriert: 14.06.2006 16:46
Wohnort: Kiel

if FileSize immer #true ?

Beitrag 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
(Win 11 64-bit, PB 6.04 und 6.10)
c4s
Beiträge: 1235
Registriert: 19.09.2007 22:18

Re: if FileSize immer #true ?

Beitrag 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.
"Menschenskinder, das Niveau dieses Forums singt schon wieder!" — GronkhLP ||| "ich hogffe ihr könnt den fehle endecken" — Marvin133 ||| "Ideoten gibts ..." — computerfreak ||| "Jup, danke. Gruss" — funkheld
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: if FileSize immer #true ?

Beitrag 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.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: if FileSize immer #true ?

Beitrag 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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Kevin
Beiträge: 236
Registriert: 11.06.2007 12:55

Re: if FileSize immer #true ?

Beitrag 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
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: if FileSize immer #true ?

Beitrag von STARGÅTE »

Ja klar, danke für die Richtigstellung
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
Sebastian
Beiträge: 322
Registriert: 14.06.2006 16:46
Wohnort: Kiel

Re: if FileSize immer #true ?

Beitrag von Sebastian »

Okay. Danke. Ich dachte immer, dass #false <= 0 bedeutet. Nun ist mir alles klar. Vielen Dank für den Hinweis!
(Win 11 64-bit, PB 6.04 und 6.10)
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: if FileSize immer #true ?

Beitrag 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.
Antworten