Frage zu "CreateDirectory"



  • Hallo Leute ,

    Ich habe ein Programm mit dem man eine bestimmte datei lesen kann.
    Diese datei enthält einen Zielort, z.B.

    Fold
    

    Nun konnte ich diese Funktion aus dem internet fischen :

    TCHAR szDirPath[] = TEXT("Folder");
    CreateDirectory(szDirPath,NULL);
    

    und es klappt auch prima , doch nun möchte ich es eig. so haben :

    TCHAR szDirPath[] = TEXT(folderDIR);
    CreateDirectory(szDirPath,NULL);
    

    Der string folderDIR enthält jetzt den Ordernamen also

    Fold
    

    Doch eingentlich kann man das ganze , und tun man auch , so schreiben ...(L"Folder")

    CreateDirectory(folderDIR,NULL);
    

    Hab ich auch mal versucht , was aber nicht geht denn die umwandlung von string in LPCWSTR ist nicht möglich.

    Gibt es dazu eine alternatieve ?

    Danke im Voraus

    - 7xCore



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

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

    Dieses Posting wurde automatisch erzeugt.



  • Wir alles was in Windows.h steht in das WinAPI verschoben ?
    Den eig. benutze ich eine console mit diesem snippet und kein Windows Window



  • Aber du benutzt de WinApi-Funktion CreateDirectory.

    Ist die Variable folderDIR vom Typ std::string?

    Dann könnte folgendes klappen:

    std::string folderDIR = "Wasweissich";
    CreateDirectoryA(folderDIR.c_str(),NULL);
    

    Ich hab aber das Gefühl, dass das ein wenig gepfuscht ist 😉



  • War eine gute idee aber ich vermute das die konvertierung von const char in LPCWSTR auch inkompitabel ist.

    Edit : Es hat nicht geklappt , wie ich schon vermutet hatte



  • Wer sagt denn etwas von LPCWSTR?
    Ich hab noch ein A an CreateDirectory gehängt. Das ist die ASCII-Version.
    Dann ist der erste Parameter vom Typ const char*



  • WTF...sorry

    Aber echt zu geil!
    Danke man.



  • Wenn du sowieso Unicode benutzt, warum dann nicht std::wstring?



  • _matze schrieb:

    Wenn du sowieso Unicode benutzt, warum dann nicht std::wstring?

    Und wenn du kein Unicode verwenden willst, kannst du das auch in den Proekteinstellungen ändern. Schau die am besten auch mal die Definition von CreateDirectory an. Je nach aktiviertem Zeichensatz wird dann entweder CreateDirectoryA oder CreateDirectoryW aufgerufen. Momentan scheint bei dir Unicode aktiviert zu sein.



  • jo danke euch.
    Das gleiche gibts a auch bei SetConsoleTitel(); SetConsoleTitelA(); SetConsoleTitelW();



  • 7xCore schrieb:

    jo danke euch.
    Das gleiche gibts a auch bei SetConsoleTitel(); SetConsoleTitelA(); SetConsoleTitelW();

    Das gibt es überall, wer aber heutzutage noch immer A-Versionen verwendet gehört ein bißchen schlimm verhauen.

    MfG SideWinder



  • SideWinder schrieb:

    7xCore schrieb:

    jo danke euch.
    Das gleiche gibts a auch bei SetConsoleTitel(); SetConsoleTitelA(); SetConsoleTitelW();

    Das gibt es überall, wer aber heutzutage noch immer A-Versionen verwendet gehört ein bißchen schlimm verhauen.

    MfG SideWinder

    Auch, wenn man nur ein Hobbyprogrammierer ist? 😃



  • 😃



  • _matze schrieb:

    Wenn du sowieso Unicode benutzt, warum dann nicht std::wstring?

    Hab ich übersehen aber ich hab getline(); benutzt was mit wstring nicht geht



  • 7xCore schrieb:

    _matze schrieb:

    Wenn du sowieso Unicode benutzt, warum dann nicht std::wstring?

    Hab ich übersehen aber ich hab getline(); benutzt was mit wstring nicht geht

    Klar geht das auch mit wstring's, nur mußt du dazu auch die wchar_t-Version der IO-Streams verwenden (wifstream, wcin etc) verwenden.



  • ah ok wenn es das gibt werd ich mir das mal einziehen



  • Oder man macht es gleich richtig:

    typedef std::basic_string<TCHAR> tstring;
    typedef std::basic_ostringstream<TCHAR> tostringstream;
    typedef std::basic_ifstream<TCHAR> tifstream;
    // etc.
    

    Wenn man konsequent TCHAR s verwendet, wo sie gebraucht werden, kann man eine klare Abgrenzung zu speziellen Fällen ( char bspw. in Dateiformaten oder Protokollen und wchar_t bspw. häufig bei COM und neueren commctrl-Funktionen) schaffen.

    Und das kann einem Dritten wirklich weiterhefen, sochen Code weiter zu entwickeln.(Edit: Rechtschreibfehler passt 👍 )

    Also macht es, bitte!



  • Jochen S. schrieb:

    SideWinder schrieb:

    7xCore schrieb:

    jo danke euch.
    Das gleiche gibts a auch bei SetConsoleTitel(); SetConsoleTitelA(); SetConsoleTitelW();

    Das gibt es überall, wer aber heutzutage noch immer A-Versionen verwendet gehört ein bißchen schlimm verhauen.

    MfG SideWinder

    Auch, wenn man nur ein Hobbyprogrammierer ist? 😃

    Klar.
    Am Ende macht man das Hobby noch zum Beruf, und andere arme professionelle Programmierer müssen mit dem Code dann arbeiten.


  • Administrator

    yahendrik schrieb:

    Oder man macht es gleich richtig:

    typedef std::basic_string<TCHAR> tstring;
    typedef std::basic_ostringstream<TCHAR> tostringstream;
    typedef std::basic_ifstream<TCHAR> tifstream;
    // etc.
    

    Wenn man konsequent TCHAR s verwendet, wo sie gebraucht werden, kann man eine klare Abgrenzung zu speziellen Fällen ( char bspw. in Dateiformaten oder Protokollen und wchar_t bspw. häufig bei COM und neueren commctrl-Funktionen) schaffen.

    Und das kann einem Dritten wirklich weiterhefen, sochen Code weiter zu entwickeln.

    Also macht es, bitte!

    tstring - naja, ok
    tostringstream - ehm, najaa~
    tifstream - ne, ne

    Wieso nicht gleich konsequent Unicode verwenden? Deine Argumentation, wieso man TCHAR verwenden soll, habe ich nicht verstanden.

    Grüssli


Anmelden zum Antworten