Ordner kopieren



  • Also den Pfad nehm ich mithilfe eines OpenFileDialog auf.
    Wie meinst du das mit / ?
    Wenn ich einen Pfad angebe, der / statt \\ enthält, funktioniert das Kopieren nicht. Oder hast du das jetzt anderst gemeint?
    Im Prinzip such ich nur ne Möglichkeit, wie ich aus den \ automatisch \\ machen kann.
    Gruß



  • Die meisten Libs unterstützen heutzutage auch / unter Windows. Das ist dann etwas einfacher zu handhaben, besonders wenn man das Programm noch unter z.B. Linux verwendet wo sowieso / zum Einsatz kommt.
    Da die Funktion anscheinen auf \\ besteht, hier eine Funktion um aus \ ein \\ zu machen:

    std::string doubleBackslash(std::string input)
    {
        std::string output;
        for (int i=0;i < input.size();++i)
        {
            output += input[i];
            if (input[i] == '\\') output += '\\';
        }
        return output;
    }
    


  • Hey Leute,
    gutes neues erst mal noch 🙂

    Danke mal an Osbios! Der Code funzt super. Nur hab ich es jetzt mal in mein Programm eingebaut und das liefert mir den Pfad in einem LPTSTR. Wie wandel ich diesen in einen normal string um, um ihn zu bearbeiten?

    Hab schon google durchforstet aber nichts passendes gefunden 😞

    MfG



  • FlorianB schrieb:

    Hab schon google durchforstet aber nichts passendes gefunden 😞

    Bezweifle ich mal ganz arg. Zwei Schritte:

    1. google mal nach LPSTR und finde gleich im allerersten Link, was ein LPSTR tatsächlich ist.
    2. überlege, wie man sowas wohl in einen std::string konvertieren kann (zur Not C++-Referenz bemühen, sollte aber jeder nach den ersten Kapiteln im Anfängerbuch verinnerlicht haben)


  • pumuckl schrieb:

    überlege, wie man sowas wohl in einen std::string konvertieren kann (zur Not C++-Referenz bemühen, sollte aber jeder nach den ersten Kapiteln im Anfängerbuch verinnerlicht haben)

    LPSTR str(const_cast<char*>("ooooo"));
            std::string meinstring(str);
    

    @pumuckl: Ich bezweifle stark, dass du seinen Post richtig gelesen hast.

    pumuckl schrieb:

    1. google mal nach LPSTR und finde gleich im allerersten Link, was ein LPSTR tatsächlich ist.

    FlorianB schrieb:

    Nur hab ich es jetzt mal in mein Programm eingebaut und das liefert mir den Pfad in einem LPTSTR.

    Ist (bzw. sollte) aber sowieso das Gleiche sein, also diesmal nich' so schlimm 🕶



  • Hey,

    vielen dank an Hacker.

    Wenn ich es in einem leeren Projekt teste funktioniert alles.

    Wenn ich es in mein richtiges Programm einbaue, kriege ich folgende Fehlermeldung:

    error C2664: 'std::basic_string<_Elem,_Traits,_Ax>::basic_string(const std::allocator<_Ty> &)': Konvertierung des Parameters 1 von 'LPTSTR' in 'const std::allocator<_Ty> &' nicht möglich

    An was kann das liegen?
    MFG



  • typedef std::basic_string<TCHAR> tstring;
    

    Und ab dann tstring statt string/wstring nutzen.



  • Ist für dein Projekt Unicode aktiviert?
    Übrigens verlangt SHFileOperation für die beiden Member pFrom und pTo der Struktur SHFILEOPSTRUCT , dass sie doppelt nullterminiert sind. Ich weiß nicht, ob string::c_str das erfüllt, auch wenn man ein zusätzliches '0' anhängt.



  • DocShoe schrieb:

    Ist für dein Projekt Unicode aktiviert?
    Übrigens verlangt SHFileOperation für die beiden Member pFrom und pTo der Struktur SHFILEOPSTRUCT , dass sie doppelt nullterminiert sind. Ich weiß nicht, ob string::c_str das erfüllt, auch wenn man ein zusätzliches '0' anhängt.

    Klar, ein std::string kann billig viele Nullen im Content haben und c_str hängt noch eine weitere an.



  • Ethon schrieb:

    Klar, ein std::string kann billig viele Nullen im Content haben und c_str hängt noch eine weitere an.

    Ist das tatsächlich so? Hast du vielleicht den Passus aus dem Standard zur Hand?
    Klar kann ich beliebig viele 0 anhängen, aber ist denn garantiert, dass c_str() einen Zeiger auf den kompletten Inhalt des Strings zurückgibt oder nur bis zur ersten 0?



  • Naja, zb Cpp-Reference sagt:

    Returns a pointer to a null-terminated character array with data equivalent to those stored in the string. The pointer is such that the range [c_str(); c_str() + size()] is valid and the values in it correspond to the values stored in the string with an additional null character after the last position.



  • Jau, reicht, bin zufrieden 👍


Anmelden zum Antworten