C++ Pfadangabe aus textbox mit opendir()



  • Hallo zusammen,

    ich hab hier kleines Problem, sitze aber nun schon fast 3 Tage dran und bekomme es nicht hin (kurz noch zur Info: habe mich bis jetzt nur mit SQL & Datenbankauswertungen sowie Access und ein wenig VBA auseinandergesetzt und beschäftige mich erst seit 2 wochen mit c++ - also komplettes neuland )
    So...
    und jetzt hier mein Problem

    Ich möchte gern ein Verzeichnis mit einer Pfadangabe aus einer textbox (pathUserMaps) auslesen und dies dann in eine txt Datein schreiben. Leider erkennt opendir diesen string nicht, sondern gibt mir immer nur das aktuelle Verzeichnis in dem exe liegt aus.

    hier der bisherige Code:

    private: System::Void LoadMaps_Click(System::Object^ sender, System::EventArgs^ e) {

    BOOL WINAPI AllocConsole(void);

    string pathUserMaps="./";

    DIR *dirHandle;
    struct dirent *dirEntry;

    dirHandle = opendir((pathUserMaps.c_str()));
    if ( dirHandle != NULL )
    }
    while ( 0 != ( dirEntry = readdir( dirHandle) ) )
    {
    ofstream fout("maplist.txt", ios::app | ios::out);
    fout << dirEntry->d_name;
    fout << endl;
    puts( dirEntry->d_name );
    }
    closedir( dirHandle );
    }
    }

    Ich denke das opendir den string falsche interpretiert (Ich habs schon mit eingabe in der Textbox mit "C:\\Users\..." versucht und klappt auch nicht.

    Für eure Hilfe wäre ich wirklich dankebar

    Gruß Indy


  • Mod

    😕 C++ ist das jedenfalls nicht. Dir Frage ist, wohin willst du verschoben werden? Ich werde daraus jedenfalls nicht schlau: System::Object^ sieht aus wie C++/CLI, AllocConsole wie WinAPI und opendir wie POSIX.



  • hab ich mit MS Visual Studio C++ /CLR/Windows Form erstellt
    bin ich da hier wirklich falsch??



  • indy1978 schrieb:

    hab ich mit MS Visual Studio C++ /CLR/Windows Form erstellt
    bin ich da hier wirklich falsch??

    Ja, bist du - ich hätte dich vermutlich direkt nach C++/CLI geschickt, aber so wie du alles durcheinanderbringst, kann nichts gutes herauskommen.

    Zu deinem Problem: Du hast eine lokale Variable string pathUserMaps="./"; definiert, die versteckt deine gleichnamige Textbox.

    PS: sfds


  • Mod

    Das klingt danach, als wolltest du C++/CLI machen. Wobei es meines Wissens nach dort gar kein opendir gibt, aber das sollen dir lieber die Experten dort bestätigen.



  • Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (auch C++0x) in das Forum C++/CLI mit .NET verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


  • Mod

    CStoll schrieb:

    Zu deinem Problem: Du hast eine lokale Variable string pathUserMaps="./"; definiert, die versteckt deine gleichnamige Textbox.

    Gah! Und ich dachte, dass hätte er zu Debuggingzwecken eingebaut, um auszuschließen, dass es an der Textbox liegt. Das hätte ich ihm auch gleich sagen können...



  • SeppJ schrieb:

    Das hätte ich ihm auch gleich sagen können...

    Warum machst du es dann nicht 😃
    Ich nehme die hier geposteten Quelltexte normalerweise als "hiermit habe ich ein Problem" Ausgangspunkte an, wenn der Autor nichts dazu sagt.

    (btw, sollte ich noch erwähnen, daß die AllocConsole()-Definition an der Stelle gar nichts bringt außer für Verwirrung zu sorgen?)



  • Nun gut was ich jetzt verstanden habe und was auch eigentlich schon vorher mir auffallen hätten sollen, das ich mit "string pathUserMaps="./"; " eine neue variable definiere
    und sorry noch mal wg AllocConsole() - das gehört da echt nicht rein - war vom testen noch - vergessen rauszulöschen.

    Allerdings benötigt ja opendir() einen char

    wir bekomme ich denn das sonst hin - ich krieg immer ne fehlermeldung



  • indy1978 schrieb:

    wir bekomme ich denn das sonst hin - ich krieg immer ne fehlermeldung

    Es wäre super, wenn du noch dazusagen könntest, welche Fehlermeldung 😉

    So kann ich nur raten: opendir erwartet einen C-String (Zeiger auf null-terminiertes char-Array), aber du hast vermutlich einen .NET-String in der Hand. Den müsstest du natürlich entsprechend umwandeln*, um ihn nutzen zu können. Alternativ sucht du nach einer .NET-Funktion mit vergleichbarer Wirkung (sowas gibt's bestimmt).

    * wie genau das aussieht, bin ich nicht sicher - aber du bist ja hier unter Experten 😉



  • Also wenn ich direkt bei opendir() auf die textbox verweise ( codezeile:
    dirHandle = opendir(pathUserMaps); ) kommt folgende Meldung

    error C2664: 'opendir': Konvertierung des Parameters 1 von 'System::Windows::Forms::TextBox ^' in 'const char *' nicht möglich
    Es ist kein benutzerdefinierter Konvertierungsoperator verfügbar, oder
    Ein verwalteter Typ kann nicht in einen nicht verwalteten Typ umgewandelt werden

    es nur ein konvertierungsfehler von der textbox die nur in einen char umwandeln muss



  • Hallo,

    um an den Text der TextBox ranzukommen, mußt du die Eigenschaft Text verwenden:

    pathUserMaps->Text
    

    Diesen .NET-String müßtest du dann aber noch in einen std::string bzw. "const char *" konvertieren...

    Einfacher wäre jedoch gleich die Verwendung der .NET-Klasse "Directory"!

    Am besten, du entscheidest dich jetzt grundsätzlich, mit welcher Sprache du weitermachen willst.

    Beachte dazu auch den Standard-Beitrag von J. Kalmbach: [url=http://www.c-plusplus.net/forum/263084]Windows Forms und Visual C++ MACHT KEINEN SINN!
    [/url]!!!
    Wenn du wirklich weiterhin WinForms programmieren willst, dann benutze dafür gleich C# (dann hast du auch keine so großen Schwierigkeiten bzgl. unterschiedlicher String-Klassen und Konvertierungen etc.).



  • indy1978 schrieb:

    error C2664: 'opendir': Konvertierung des Parameters 1 von 'System::Windows::Forms::TextBox ^' in 'const char *' nicht möglich
    Es ist kein benutzerdefinierter Konvertierungsoperator verfügbar, oder
    Ein verwalteter Typ kann nicht in einen nicht verwalteten Typ umgewandelt werden

    OK, habe anscheinend richtig geraten. Nur der Weg ist ein wenig länger als erwartet: Textbox hat eine Property namens "Text", die den Inhalt als String^ (.NET String) liefert. Aber auf Anhieb habe ich nichts gefunden, um daraus einen C-String oder std::string zu machen (zur Not benötigt man wohl eine Schleife, um die Inhalte direkt zu holen). Fazit: Du kommst sicher besser weg, wenn du .NET-Methoden verwendest, z.B. die Directory-Klasse.


Anmelden zum Antworten