FILE()

09/02/2010 - 04:41 von Matthias Kahlert | Report spam
Habadere mitanander,

mir ist bei der Fehlersuche heute eine komische Sache aufgefallen:

Gegeben: Eine Datei namens "118.jpg" ist in meinem Programm vorhanden in
einem Unterordner namens "backgrounds". Datei ist im Projekt inkludiert
und wird nicht gesondert mit ausgeliefert.
Also: c:\ProgName\Background\118.jpg

Jetzt erfolgt irgendwo im Programm eine Abfrage:
IF FILE("c:\ProgName\Fotos\118.jpg") == .T. THEN...
Dieser Aufruf liefert plötzlich ein .T. zurück, obwohl diese Datei in
dem angegebenen Pfad definitiv nicht existiert! Der Ordner "Fotos" ist
zwar vorhanden, aber leer.

Kleiner Test:

lcFile = "c:\ProgName\Fotos\118.jpg"
? "Datei: ", lcFile
? "FILE(): ", FILE(lcFile)
? "EVALUATE(): ", EVALUATE("FILE('"+lcFile+"')")
? "EXECSCRIPT(): "
EXECSCRIPT("?? FILE('"+lcFile+"')")

In der Entwicklungsumgebung kommt als Ergebnis raus:
FILE(): .F.
EVALUATE(): .F.
EXECSCRIPT(): .F.

Aber in der laufenden EXE kommt als Ergebnis:
FILE(): .T.
EVALUATE(): .T.
EXECSCRIPT(): .F.

WTF? Jemand ne Idee, worans liegt? Da ist doch bestimmt wieder
irgendeine dàmliche SET Einstellung schuld.
Laut Online-Hilfe wird zumindest die SET PATH Einstellung nur dann
verwendet, wenn beim Dateinamen kein Pfad angegeben wurde, was aber hier
nicht der Fall ist.
Und: Warum liefert EXECSCRIPT() das erwartete Ergebnis, die anderen
Aufrufe aber nicht?

Als Workaround habe ich mir jetzt eine eigene FILE() Funktion gebaut,
die einfach per ADIR() nachschaut, ob die Datei existiert. Damit bekomme
ich wenigstens ein KORREKTES Ergebnis...

Matthias
 

Lesen sie die antworten

#1 Horst Kühn
09/02/2010 - 06:34 | Warnen spam
Moin Matthias ,

Hast Du schon mal ausprobiert wie das ohne == .T. aussieht ? So wie Du
das ja bei dem Test in der Entwicklungsumgebung auch schreibst. "=="
vergleicht ja Strings die ungeachtet der set exact -Einstellung exakt
identisch sein müssen (inkl. Spaces). Vielleicht ist ihm ja das .T.
irgendwie suspekt.

Horst
aus dem Eisloch WBL

Ähnliche fragen