PathCombineW sinnvoll und nützlich oder doch direktes Zusammenfügen bzw. sstream

  • C++

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von Trade.

    PathCombineW sinnvoll und nützlich oder doch direktes Zusammenfügen bzw. sstream

    Moin,

    ich war grade dabei einen Pfad zu erstellen, indem ich zwei Teile verbinde.
    Jetzt war die Frage, ob ich auf WinAPI zurückgreifen und PathCombineW nutzen sollte oder die Strings so zu verbinden.

    Beim 1. müsste ich halt sowas machen:

    C-Quellcode

    1. #include "main.h"
    2. #include <iostream>
    3. #include "windows.h"
    4. // etc.
    5. using namespace std;
    6. class main
    7. {
    8. INT WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, PSTR, INT iCmdShow) {
    9. wstring res_path;
    10. wstring path_part1 = L"C:\\Users\\Test";
    11. wstring path_part2 = L"file.txt";
    12. PathCombineW(res_path.c_str(), path_part1.c_str(), path_part2.c_str());
    13. if (res_path == NULL)
    14. {
    15. // Check why.
    16. }
    17. // CreateWindowEx, ShowWindow, WndProc for MessageLoop etc.
    18. }
    19. }


    Ist jetzt aus dem Kopf, müsste jedoch so gehen, da PathCombineW​ ja LPCWSTR annimmt, was ja wiederrum ein Typedef für const wchar_t* ist, was wiederrum mit wstring benutzt werden kann, da dies ja 'nen Typedef für basic_string<wchar_t> ist.
    Außerdem muss ich so nicht direkt mit irgendwelchen Char-Arrays und Pointern arbeiten, die ich wieder freigeben muss usw., sondern lasse das intern regeln.

    Jetzt die Fragen:
    • Macht es hier Sinn die Methode zu verwenden oder sollte man hier auch lieber auf WinAPI verzichten? Ich denke, das sollte man, wo es geht, aber bin jetzt auch nicht sicher. Oder sollte ich hier doch direkt die aneinanderfügen, also manuell oder mit einem sstream evtl.? Problem ist halt, dass ein Pfad nicht hardcoded ist, sondern von _dupenv_s kommt, daher. (Natürlich muss das noch konvertiert werden, da das ja nur 'nen char* als Puffer benutzt.
    • Auf MSDN steht, dass Directory, also der eine Parameter "C:", "D:"... "Z:" sein muss. Ich frage mich nun, wenn das so ist, was macht die Methode dann für einen Sinn? Oder geht das auch im Sinne meines Beispiels oben? Habe grade keine IDE.


    Ach ja, Boost verwende ich btw nicht. ;) Würde mich interessieren.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    GCL hat ja jetzt in der neuen Version eine IO-Klasse und da habe ich jetzt einfach mal nachgeschaut und scheint mit der API so in Ordnung zu sein und auch ist die Verwendung korrekt. War mir nur nicht sicher, da ich auch jetzt nicht all zu viel ausführliches dazu gefunden habe.
    Erledigt. ;)

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!: