Problem mit auslesen und übergeben von Pfaden



  • Hallo lieber Community,

    ich habe ein Problem mit der fopen()-Funktion der FILE Klasse. Ich lese aus einer Datei einen Pfad als CString auf folgende Art und Weise aus:

    char* buff=new char[255];
    CString directory;
    FILE* fp;
    fp=fopen("C:\\blablabla\\bla.txt","rb");
    fgets(buff,255,fp);
    directory=buff;
    close(fp);
    

    Nun habe steht in 'directory' der Pfad den ich in der Datei abgelegt habe:
    'directory' übergebe ich dann einer Funktion, die einen CFolderDialog öffnet, und zwar soll der Pfad, der beim Öffnen des Dialoges erscheint eben dem ausgelesenen Dateipfad entsprechen.

    funktion(directory,.....);
    ...
    CFolderDialog* pFolderDlg;
    pFolderDlg=new CFolderDialog("Select ... Folder!", directory, NULL,
    BIF_RETURNONLYFSDIRS);
    if(pFolderDlg->DoModal()==IDOK)
    {
    ......
    }
    

    Das Problem ist, dass er anscheinend den CString directory nicht erkennt und immer nur den Standartpfad C:\\ als erste Pfadangabe anzeigt. Auch Versuche die '/0' am Ende des CStrings zu entfernen oder die \\ durch \ oder / zu ersetzen schlugen fehlt. Was mache ich falsch? Hat jemand eine Ahnung?

    MFG
    Chris



  • Was ist CFolderDialog überhaupt? Standard-MFC Klasse ist das keine.
    Also entweder übergibst du einen Pfad, den das System nicht hat und deine Klasse wechselst auf C:\, oder die CFolderDialog-Klasse hat einen Fehler.

    Wie sieht denn der Pfad aus, den du an die Klasse übergibst?



  • Das sieht stark nach Microsoft WTL aus.

    Nach der Installation ist die Klasse in atldlgs.h zu finden

    CFolderDialog(HWND hWndParent = NULL, LPCTSTR lpstrTitle = NULL, UINT uFlags = BIF_RETURNONLYFSDIRS) : CFolderDialogImpl<CFolderDialog>(hWndParent, lpstrTitle, uFlags);
    

    Download Windows Template Library (WTL) 8.0:
    http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=e5ba5ba4-6e6b-462a-b24c-61115e846f0c

    Der Parameter BIF_RETURNONLYFSDIRS deutet darauf hin, allerdings sehe ich keinen Parameter, der einen Startwert
    annehmen könnte.

    Statt dessen gibt es den public Member m_lpstrInitialFolder sowie einer passenden Methode ...

    LPCTSTR m_lpstrInitialFolder;
    void SetInitialFolder(LPCTSTR lpstrInitialFolder, bool bExpand = true);
    

Anmelden zum Antworten