VC++ GetShortPathName() in der ListBox



  • Hallo,
    ich hoffe ich bin hier richtig und mir kann geholfen werden, da ich noch ein blutiger Anfänger bin. Daher hoffe ich, dass ich meine Frage hier richtig platziert habe.

    Ich erzeuge also in Visual C++ 2010 Express ein Projekt mit Windows-Forms Anwendung.
    Jetzt habe ich vor in der ListBox ein Ordnerinhalt auszugeben.
    Das hat auch gut geklappt.
    Beim Drücken eines Buttons wird der Ordnerinhalt ausgegeben.
    hier ist der Codefragment, der das macht:

    private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {  
                      String^ folder = "C:\\";
                      array<String^>^ dir = Directory::GetDirectories(folder); 
                      for (int i=0; i<dir->Length; i++)
                          this->listBox1->Items->Add(dir[i]); // Ausgabe der Ordnerliste
                 }
    

    Jetzt möchte ich aber die Ordnernamen in der Dos-Form 8.3 ausgeben,
    dafür habe ich die Funktion GetShortPathName() gefunden.
    Leider geht es damit nicht, ich vermute das die string bzw. char Dateitypen konvertiert werden müssen um die Daten anzuwenden.

    Hat vielleicht jemand einen Rat für mich, wie ich es anstellen soll.



  • Dem String constructor kannst du TCHAR * oder LPTSTR übergeben:

    String^ folder = gcnew String(lpszShortPath);

    Siehe:

    https://msdn.microsoft.com/en-us/library/windows/desktop/aa364989%28v=vs.85%29.aspx



  • Hallo zusammen!

    Ich nutze dieses Codeschnipsel ebenfalls und habe ein kleines Problem.
    Ich lese zunächst auch den Ordnerinhalt mittels " array<String> dir = Directory::GetDirectories(folder);" in ein Array ein.
    Anschließend greife ich auch die Einträge des Arrays zu (z.B. dir[2]).
    Wenn jetzt aber das Arry lehr bleibt wie der Ordner leer ist stürzt das
    ganze ab. Sicher weil das ich versuche auf ein leeres Array zuzugreifen.
    Jetzt hatte ich die Idee das Array mit "nullptr" im Vorfeld zu initialisieren.
    Das bekomme ich aber von der Syntax nicht hin. Ein Vergleich von "dir[0] mit
    dem Wert "0" ist ja ebenfalls ein Zugriff auf ein leeres Array.

    Hilfe!! 🤡)

    Viele Dank schon mal!
    Micha


Anmelden zum Antworten