Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C++CLI / VB .Net / .Net-Framework » VC++ GetShortPathName() in der ListBox

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
19.04.2015, 19:18 Uhr
comcmd



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:

C++:
    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.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
28.04.2015, 12:54 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Hallo,

ja da vermutest du richtig: du musst den String konvertieren.

z.B. so:


C++:
public static string ToShortPathName(string longName)
{
    uint bufferSize = 256;

    // don´t allocate stringbuilder here but outside of the function for fast access
    StringBuilder shortNameBuffer = new StringBuilder((int)bufferSize);

    uint result = GetShortPathName(longName, shortNameBuffer, bufferSize);

    return shortNameBuffer.ToString();
}



(Quelle: www.pinvoke.net/default.aspx/kernel32.getshortpathname )

Da ich mich nicht gut genug mit C++/CLI auskenne, evtl kannst du auch einfach die Deklaration für die Funktion nutzen, und er nimmt dir direkt die Arbeit ab:


C++:
[DllImport("kernel32.dll", CharSet = CharSet::Auto, SetLastError=true)]
static int GetShortPathName(
    [MarshalAs(UnmanagedType::LPTStr)]
    String^ lpszLongPath,
    [MarshalAs(UnmanagedType::LPTStr)]
    System::Text::StringBuilder^ lpszShortPath,
    unsigned int cchBuffer);


--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C++CLI / VB .Net / .Net-Framework ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: