CFileDialog - Mehrfach selektion



  • Hallo

    Ich habe ein Problem bei meinem CFileDialog: Sobald ich mehr als 6 Dateien selektiere, funktioniert überhaupt nichts. Sonst läufts. Wo könnte das Problem sein?

    Hier der Code:

    CFileDialog* FD = new CFileDialog(true, NULL, NULL, OFN_ALLOWMULTISELECT | OFN_HIDEREADONLY | OFN_FILEMUSTEXIST, cs, NULL,0);

    if (FD->DoModal() == IDOK) {
    POSITION p = FD->GetStartPosition();
    CString FN;
    while (p != NULL)
    {
    FN = FD->GetNextPathName(p); //Name ausgeben
    AddFile(FN.GetBuffer(255));
    }
    }

    delete FD;

    Vielen Dank!



  • Was soll denn das mit dem GetBuffer(..)? Wo bleibt das ReleaseBuffer(..)? Lass das GetBuffer(..) mal weg, vielleicht klappt's dann ...



  • Nein, nein, das ist schon gut so. Ich habe noch etwas total programmspezifischen Code rausgeworfen (will euch ja nicht langweilen), und das ist noch übrig geblieben.

    Sind mehr als 6 Files gewählt, ist if (FD->DoModal() == IDOK) nicht wahr und es bricht von vornherein ab. Es passiert also überhaupt nichts, so als ob ich Cancel geklickt hätte.



  • Irgendwann im Forum wurde zu diesem Thema/ Problem schon mal etwas diskutiert, musst Du mal schauen, mehr kann ich dazu auch nicht sagen.



  • Muss einfach nur m_ofn.lpstrFile und m_ofn.nMaxFile überschrieben werden mit einem grösseren Buffer, da CFileDialog nur _MAX_PATH Zeichen innerhalb des Strings unterstützt.

    while (p != NULL)
    {
    FN = FD->GetNextPathName(p); //Name ausgeben
    AddFile(FN.GetBuffer(255));
    }
    

    P.S. das ist wirklich unschöner Code!



  • Sorry, ich raffs noch nicht ganz. Wo muss ich diese beiden Werte überschreiben? Vor dem DoModal oder danach? Mache ich es vorher bekomme ich bei ASSERT(nOffset <= m_ofn.nMaxFile) Probleme, und sonst tut sich gar nichts.

    Kannst du mir noch etwas mehr sagen?

    Vielen Dank!



  • Naja, zum Beispiel so:

    TCHAR newString[20480];
    newString[0] = 0;
    CFileDialog dlg;
    dlg.m_ofn.lpstrFile = newString;
    dlg.m_ofn.nMaxFile = 20480;
    dlg.DoMoal();
    


  • Hey spitze, es klappt!

    Vielen Dank!


Anmelden zum Antworten