Verzeichnis des Programms?



  • Wie bekomm ich mein Arbeisverzeichnis, wo die .exe drin liegt? Ich habe eine .ini, die ich abspeichere, um Daten zu sichern. Diese soll im selben Verzeichnis wie die .exe liegen. Klappt auch, bis zum ersten Speichern oder Öffnen über CFileDialog. Damit ändert das Programm mein Arbeitsverzeichnis und die .ini wird automatisch dort erzeugt, wo ich zuletzt geladen oder gespeichert hab.

    Und ich find einfach nicht den Befehl dafür. Kann mir wer schnell aus der Patsche helfen.

    Thx im Voraus.



  • es gibt eine Funktion die dir genau das ausgibt was du haben willst. Fällt mir aber im moment nicht ein.

    Alternative:

    Speicher dir den Pfad am Anfang deines Programms mit GetCurrentDirectory()



  • So??

    //holt den Pfad von dem aus die Applikation gestartet wurde
    CString GetApplicationDirectory()
    {
       TCHAR szPathName[_MAX_PATH];
       ::GetModuleFileName(NULL, szPathName, _MAX_PATH);
       LPTSTR pszFileName = _tcsrchr(szPathName, '\\') + 1;
       *pszFileName = '\0'; return szPathName;
    


  • Horst2 schrieb:

    Alternative:

    suche benutzen. ich schaetze mal, die eingangsfrage fuehrt die rangliste der meist gestellten fragen mit grossem abstand an.

    Esco



  • Jos, was dann auf so Dinge wie dies hier führt:

    char m_path[_MAX_PATH];
    	_getcwd( m_path, _MAX_PATH );
    

    Mit dem einzigem Problem, damit find ich auch wieder nur das grade aktuelle Verzeichnis.

    GetCurrentPath wäre auch mein nächster Ansatz gewesen, wenn keine Antwort gekommen wäre, aber wenn in den Einträgen der Suche schon drin steht ned zuverlässig (wieso auch immer, aber ist Windows, da frag ich ned mehr wieso etwas instabil ist, ich nehms halt hin), dann such ich halt ne Alternative 😉

    Insofern THX Polo 🙂 Hoffe ich bekomms nun hin ohne noch weiteren Datenmüll zu produzieren 😉



  • die Funktion solltest du einfach über deiner Funktion platzieren und dann in deiner Funktion aufrufen können, wenn ich mich nicht schwer irre. 😉



  • So... sry Polo, entweder möchte er deine Abfrage ned oder ich war einfach nur zu blöd zum implementieren. Habs wie folgt gelöst, falls wer diesmal Suche nutzt 😉

    Tut einwandfrei. Thx euch. War hoffentlich die letzte Frage meinerseits. Denke Programm passt nun so wie es ist 😉

    CString m_path = GetCommandLine();		// Pfad + Name der Exe holen 
    	int pos = m_path.ReverseFind( '\\');	// letztes '\' finden 
    	m_path = m_path.Mid(1, pos-1);			// Name der Exe abtrennen, so dass nur noch der Pfad übrig bleibt 	
    
    	CString m_ini = m_path + "\\comm.ini"; 
    	CStdioFile file;
    	file.Open(m_ini, CFile::modeCreate | CFile::modeWrite); 
    	file.WriteString(m_port + "\n"); 
    	file.WriteString(m_datarate + "\n"); 
    	file.WriteString(m_databits + "\n"); 
    	file.WriteString(m_parity + "\n"); 
    	file.WriteString(m_stopbits + "\n"); 
    
    	file.Close();  
    
    	CDialog::OnOK();
    


  • Polofreak schrieb:

    So??

    //holt den Pfad von dem aus die Applikation gestartet wurde
    CString GetApplicationDirectory()
    {
       TCHAR szPathName[_MAX_PATH];
       ::GetModuleFileName(NULL, szPathName, _MAX_PATH);
       LPTSTR pszFileName = _tcsrchr(szPathName, '\\') + 1;
       *pszFileName = '\0'; return szPathName;
    

    Du gibst einen Zeiger auf eine lokale Variable zurück. Nicht gut.

    EDIT: Blödsinn. Das ist in Ordnung.


Anmelden zum Antworten