Pfad wird nicht richtig erkannt.(variable wird überschrieben?)



  • hi zusammen,

    um das prob hier nochmals aufzugreifen, da ich dem prob schon mal ein wenig näher gekommen bin.

    problemstellung:
    wenn ich mit der TOpenDialog komponente nun ein file öffne, wird ja immer der letzte pfad im speicher abgelegt. so weit so gut.
    mit

    OPDialog1->Free();
    

    sollte ich den speicher eigentlich wieder frei geben.

    in meinem beispiel oben hab ich mehrere formulare. wechsel ich nun in ein anderes formular und möchte nun mittels "LoadFromFile" eine datei einlesen, dann holt er sich allerdings zuerst den pfad von TOpenDialog und setzt dann den neuen pfad zu meiner datei einfach dran. so entsteht die o.g. fehlermeldung, da dieser pfad natürlich nicht existent ist.

    Meine frage ist nun, wie bekomme ich das hin das beim verlassen des formulares der pfad von TOpenDialog wirklich gelöscht wird?



  • Hallo

    Aus deinem Text bin ich zwar nicht richtig schlau geworden, aber ich vermute du kannst dein Problem mit TOpenDialog::InitialDir lösen.

    Übrigens hoffe ich für dich, das du ->Free() wirklick korrekt einsetzt.
    Damit wird nämlich die ganze Dialog-Instanz gelöscht, und dafür solltest du eigentlich auch lieber delete nehmen. Egal wie darfst du das aber auch nur machen, wenn du die Dialog-Instanz selber dynamisch mit new erstellst.
    Free ist nicht dazu da die Werte des Dialogs zurückzusetzen!

    bis bald
    akari



  • Filename löschen= OPDialog1->FileName=""

    das mit dem Free hast du offenbar falsch verstanden:

    Free:

    Löst die Instanz eines Objekts auf und gibt nötigenfalls den zugehörigen Speicher frei.

    Hinweis:
    Geben Sie in C++ keine Objekte mit Free frei. Verwenden Sie stattdessen das Schlüsselwort delete.

    Da wird die Instanz gelöscht. Könnte sein, dass deine Probleme dadurch verursacht werden.

    Im übrigen hindert dich keiner darn, in einem neuen Formular die Komponente ein weiteres mal hinzuzufügen oder eine neue Klasse zu nehmen



  • zu spät 😉



  • Die Verwendung von TOpenDialog (durch den Anwender) setzt das Arbeitsverzeichnis auf das dort zuletzt ausgewählte Verzeichnis. Das Löschen der TOpenDialog-Instanz hat m.E. darauf keinen Einfluss.
    Siehe auch die API-Funktionen GetWorkingDirectory und SetWorkingDirectory.

    Um dir derlei Probleme zu ersparen solltest du immer mit Pfadangaben arbeiten, die sich auf einen festen Punkt in der Verzeichnisstruktur beziehen, also z.B. vom Installationsverzeichnis deiner Anwendung ausgehend (TApplication::ExeName) oder dem Windows-Verzeichnis o.ä.



  • hi zusammen,

    leider kam ich mit euren tipps nicht weiter. wir scheinen irgendwie aneinander vorbei zu reden. mal ein ganz simples beispiel:

    TStringList *list = new TStringList();
    	list->LoadFromFile("path.ini"); //liegt im programmpfad
    ......
    

    führe ich das aus ist alles im grünen bereich.

    gehe ich jetzt hin und führe folgendes aus:

    if(OPDialog1->Execute()== true)
    	{
    		// image laden
    		Image1->Picture->LoadFromFile(OPDialog1->FileName);
    ..........}
    

    das laden des bildes funzt auch. gehen wir mal davon aus ich hätte das bild von c:\windows geladen.

    jetzt kommt der punkt wo ich nicht mehr weiter komme!!!

    führe ich nun wieder aus:

    TStringList *list = new TStringList();
    	list->LoadFromFile("path.ini"); //liegt im programmpfad
    ......
    

    dann kommt die fehlermeldung das er das file (path.ini) nicht im verzeichnis c:\windows\path.ini finden kann. logisch, liegt da ja auch nicht. 😮

    wieso wird bei der 2. ausführung der pfad von OPDialog hinzugefügt??? und vor allem, wie krieg ich das weg?

    ich hoffe das ich jetzt mein anliegen deutlicher beschrieben hab 😕

    danke für eure mühen



  • Siehe letzten Beitrag auf der ersten Seite des Threads.



  • Wie schon geschrieben, mit festen absoluten oder relativen Angaben arbeiten. Es gibt nur ein Aktuelles Verzeichnis. Das kannst du mit ChDir setzen



  • danke ihr beiden,

    hab mal absoluten pfad eingetragen und dann funzt es.

    werde mir mal ExeName und auch ChDir näher anschauen 🕶



  • @ jansen,

    war goldrichtig, funzt jetzt 🕶

    dank auch an @Christian211.

    problem erledigt 👍


Anmelden zum Antworten