Seite 2 von 5

Re: PureBasic 4.40 beta6

Verfasst: 06.11.2009 11:48
von Pelagio
Auch mein Dank gebührt dem Team,

allerdings ist mir, da ich mich jetzt erst der Projektmöglichkeit des Programms vertraut mache, etwas aufgefallen.
Wenn ich ein Projekt öffne und Bspw. eine Datei aus einem untergeordneten Verzeichnis laden will ist dies nicht möglich, die Datei wird nicht gefunden obwohl in den Compileroptionen unter 'Kompilieren/Starten - Executable starten mit - Aktuelles Verzeichnis:' das Verzeichnis angebunden ist (Bsp.: Data\).
Allerdings: Wenn ich den Source nicht mit dem Projekt starte, wird die Datei geladen und im Debugger angezeigt.
  • E:\
    Test.pbp
    Test.pb
    ........Data\
    Test.txt

Code: Alles auswählen

If ReadFile(0, "Test.txt") 
    While Eof(0) = 0       
      Debug ReadString(0)  
    Wend
    CloseFile(0)     
  Else
    MessageRequester("Information","Konnte Datei nicht öffnen!")
EndIf

Re: PureBasic 4.40 beta6

Verfasst: 06.11.2009 13:15
von Falko
Pelagio hat geschrieben:Auch mein Dank gebührt dem Team,

allerdings ist mir, da ich mich jetzt erst der Projektmöglichkeit des Programms vertraut mache, etwas aufgefallen.
Wenn ich ein Projekt öffne und Bspw. eine Datei aus einem untergeordneten Verzeichnis laden will ist dies nicht möglich, die Datei wird nicht gefunden obwohl in den Compileroptionen unter 'Kompilieren/Starten - Executable starten mit - Aktuelles Verzeichnis:' das Verzeichnis angebunden ist (Bsp.: Data\).
Allerdings: Wenn ich den Source nicht mit dem Projekt starte, wird die Datei geladen und im Debugger angezeigt.
  • E:\
    Test.pbp
    Test.pb
    ........Data\
    Test.txt

Code: Alles auswählen

If ReadFile(0, "Test.txt") 
    While Eof(0) = 0       
      Debug ReadString(0)  
    Wend
    CloseFile(0)     
  Else
    MessageRequester("Information","Konnte Datei nicht öffnen!")
EndIf
Wie meinst du das mit dem Data? Schreibst du es \Data\Test.txt oder Data\Test.txt?
Ich hab's jetzt nicht getestet. Die Arbeit ruft mal wieder.

Gruß Falko

Re: PureBasic 4.40 beta6

Verfasst: 06.11.2009 13:34
von Pelagio
Hallo Falko,

Ich habe es folgendermaßen gemeint:
In einem Verzeichnis habe ich zwei Dateien, Test.pbp und Test.pb. In diesem Verzeichnis liegt auch noch ein Unterverzeichnis, Data genannt (kann auch jeden anderen Namen haben) in dem eine Textdatei (Beispiel: Test.txt) liegt die ich auslesen möchte. Das Verzeichnis habe ich mit der IDE als Aktuelles Verzeichnis gekennzeichnet so das automatisch 'Data\' eingetragen wurde. In diesem Fall würde die Textdatei nicht gelesen werden.
Würde ich jetzt per Hand 'E:\Data\' eintragen so würde die Textdatei gelesen, allerdings würde beim Neustart des Projektes wieder 'Data\' im Aktuellen Verzeichnis stehen und ich könnte die Textdatei wiederum nicht auslesen.
Dies Problem liegt aber nur vor wenn ich das Projekt, in dem die Datei 'Test.pb' eingebunden ist, lade.
Würde ich die Datei 'Test.pb' als reine PB Datei laden so würde das Problem nicht auftreten.

Re: PureBasic 4.40 beta6

Verfasst: 06.11.2009 13:59
von ts-soft
@Pelagio
Einfach mal das aktuelle Verzeichnis auf den richtigen Pfad setzen. Merkwürdigerweise denkt jeder,
das der Programpfad und das aktuelle Verzeichnis automatisch übereinstimmen. Dies ist nicht immer
der Fall. Relative Pfade kann man erst nutzen, nachdem man den Pfad mit
Setcurrentdirectory korrekt selber gesetzt hat. Alles andere ist ein Glücksspiel mit 99% erfolgschance,
wobei das eine Prozent trotzdem beachtet werden sollte. Ausserdem sollte man evtl. beachten, das
die Exe im Tempordner erstellt wird.

Gruß
Thomas

Re: PureBasic 4.40 beta6

Verfasst: 06.11.2009 20:14
von Pelagio
@ts-soft,

das ist mir soweit bekannt allerdings wird das aktuelle Verzeichnis über das Projekt nicht vollständig gespeichert, jedenfalls nicht wenn es sich um ein Unterordner handelt und zweitens funktioniert es wenn man nicht im Projekt arbeitet. Und wie gesagt der relative Pfad wird von PBP erzeugt und wenn ich auch den vollständigen Pfad manuell eingebe, speichert PBP nur den relativen Pfad. Um nochmal klar zu stellen, wenn man kein Projekt benutzt funktioniert es, immer.
Im Augenblick ist es also so, wenn ich ein Projekt lade, gehe ich in den Optionen auf das aktuelle Verzeichnis und gebe manuell den Vollständigen Pfad ein: Danach kann ich ganz normal das Programm ausprobieren. Beim nächsten Laden ist es wieder das gleiche Spiel.

Re: PureBasic 4.40 beta6

Verfasst: 06.11.2009 20:25
von ts-soft
Es ist doch egal, ob es als source geht und als projekt nicht, setze im programm den pfad selber und es wird
immer gehen, später auch beim user, wenn der es zum beispiel in einer console startet ohne den pfad vorher zu wechseln.
Es ist ausserdem vollkommen korrekt, das im projektverzeichnis alles relativ gespeichert ist, ansonsten wäre eine weitergabe / ein verschieben ja nicht möglich.

Immer wieder dasselbe Thema, weil jeder erwartet das CurrentDirectory von irgendwem gesetzt sein muß :mrgreen:
Der Explorer setzt es bei Doppelklick, beim Doppelklick auf Source wirds auch gesetzt, bzw. evtl. von der IDE gesetzt aber darauf sollte man sich niemals verlassen. Mach es richtig und diese Problem wird nie wieder eins sein, egal ob oder wie der Source, das Projekt oder die Exe gestartet wird.
Der Fehler tritt übrigens meist erst beim Anwender auf, der den Fehler aber seltenst genau beschreiben kann.

Aber ich hab langsam keine lust mehr das ganze zu erklären :wink:

Gruß
Thomas

Re: PureBasic 4.40 beta6

Verfasst: 06.11.2009 20:35
von Pelagio
@ts-soft,

ich verstehe schon das es Dich nervt, allerdings habe ich auch das Gefühl das Du das Problem nicht richtig verstanden hast. Es ist ja auch kein wirkliches Problem, höchstens unlogisch in der IDE Philosophie.
Da ich das Problem kenne und damit leben kann werde ich hiermit meine Frage diesbezüglich nicht weiter relativieren um Dich nicht um deinen Schlaf zu bringen, obwohl ich glaube das, wenn mehrere mit dem Projekt arbeiten, die Frage sicherlich wieder auftauchen wird. Ich hoffe nur besser formuliert als ich es konnte.
:praise:

Re: PureBasic 4.40 beta6

Verfasst: 06.11.2009 20:47
von ts-soft
Ist nicht unlogisch in der IDE, das Problem exisitiert generell taucht aber nur in ca. 1% aller Fälle auf und sollte deshalb grundsätzlich selber gehändelt werde.
In den Compileroptionen am besten "Temporäres Executable im Quellcode-Verzeichnis erstellen" anhaken und
im Source ziemlich am anfang folgende Zeile:

Code: Alles auswählen

SetCurrentDirectory(GetPathPart(ProgramFilename()))
Und schon wird alles unter allen Umständen (ausser bei Fehlern im Source :mrgreen: ) funktionieren, auch beim Nachbarn!

Man sollte niemals erwarten, daß das aktuelle Verzeichnis und das Verzeichnis des Programmes übereinstimmen und deshalb vor Nutzung von relativen Pfaden immer Sicherstellen, das dies übereinstimmt.

Das Problem ist, das diese beiden Verzeichnisse meist automatisch übereinstimmen, so das jeder denkt es wäre ein Fehler wenn dem nicht so ist. Es ist kein Fehler wenn dem nicht so ist, weils in der Praxis auch nicht immer so ist!

Ich hoffe jetzt hast Du es jetzt verstanden :wink:

Gruß
Thomas

// edit:
selbst wenn Freak da noch was ändern sollte ist mein obiges beschiebenes Vorgehn erforderlich, weils einfach immer erforderlich ist wenn man oder das projekt oder egal was einen relativen pfad nutzt.

Re: PureBasic 4.40 beta6

Verfasst: 07.11.2009 00:53
von Kiffi
@freak: Es wäre schön, wenn Du uns von offizieller Seite bestätigen
würdest, ob es sich bei der von Kai und mir gemeldeten Antivirus-
Meldung um einen Fehlalarm handelt. Vorher kann und will ich die Beta 6
nicht installieren und testen.

Grüße ... Kiffi

Re: PureBasic 4.40 beta6

Verfasst: 07.11.2009 00:56
von c4s
Kiffi hat geschrieben:@freak: Es wäre schön, wenn Du uns von offizieller Seite bestätigen
würdest, ob es sich bei der von Kai und mir gemeldeten Antivirus-
Meldung um einen Fehlalarm handelt. Vorher kann und will ich die Beta 6
nicht installieren und testen.
:shock:
Was soll es denn sonst sein außer ein Fehlalarm. Ich denke Freak, Fred und Co. sind vertrauenswürdig genug, dass man es auch ohne "offizielle Bestätigung" installieren und testen kann...