Hilfe mit CopyFile



  • Hat dir SideWinder alles schon erklärt. Lies nochmal genauer.

    sizeof(CHAR) = sizeof(char) = 1
    sizeof(WCHAR) = 2
    sizeof(TCHAR) = [kommt drauf an, ob UNICODE definiert ist, d.h. ob irgendwo "#define UNICODE" steht]



  • Hat dir SideWinder alles schon erklärt. Lies nochmal genauer.

    Ich habe das so verstanden das ich anstatt char als Datentyp TCHAR benutzen soll, um dem Unicode Standard gerecht zu werden. Aber wenn ich als Datentyp TCHAR verwende gibt der Compiler einen Fehler aus. Daher dachte ich mir das ich es wohl nicht richtig verstehe. Da kann ich so oft lesen wie ich will, für mich will sich aus diesem Text kein anderer Sinn erschließen.



  • Auch wenn mir auf den oberen Beitrag niemand geantwortet hat wäre es nett wenn mir bei meinem nächsten Problem geholfen wird.
    Ich habe ein Problem damit meine Strings in LPCWSTR zu ändern wie es von der CopyFile() verlangt wird. Hab schon bei Google gesucht und in der MSDN, aber die meisten Texte verstehe ich nicht. Also falls möglich wäre eine verständliche und simpel erklärte Antwort nett.



  • Hat SideWinder doch schon geschrieben:

    CopyFile (TEXT("C:\\Ordner1\\datei.dat"), TEXT("C:\\Ordner2\\datei.dat"), TRUE);

    TEXT ist ein Makro und weist den Compiler an, je nach Einstellung (Ansi oder Unicode) entweder 1-Byte- oder 2-Byte-Unicode-Strings zu erzeugen.



  • Ich hab mich undeutlich ausgedrückt. Ich meinte wenn ich eine Variable mit dem Datentyp string hab. Da kann ich dieses TEXT() nicht benutzen sondern muss auf LPCWSTR casten oder sonstwas. Nur wie ich des hin bekomme ist mir ein Rätsel.



  • Wenn Du einen Ansi-String nach Unicode konvertieren möchtest:
    WinApi-Funktion "MultiByteToWideChar".



  • Und wie benutz ich des jetzt? Was da in der MSDN steht bringt mich kein stück weiter. Woher soll ich wissen welche flags ich zu benutzen hab?
    Ich bekomme vom Compiler nur diese Meldung wenn ich versuche die Funktion zu benutzen.

    error C2664: 'MultiByteToWideChar': Konvertierung des Parameters 3 von 'std::string' in 'LPCSTR' nicht möglich
    Kein benutzerdefinierter Konvertierungsoperator verfügbar, der diese Konvertierung durchführen kann, oder der Operator kann nicht aufgerufen werden
    


  • das mit dem TCAHR sollte in etwa so aussehen:

    const TCHAR* path="C:\\abc.txt";
    const TCHAR* newpath="C:\\Programme\\abc.txt";
    CopyFile(path, newpath, TRUE);
    

    allerdings solltest du dann noch <tchar.h> includieren und anstatt main() _tmain() verwenden.



  • Kann ich dann einfach eine string variable in ein TCHAR casten und in der AutoCopy Funktion benutzen? Ich frage weils bei mir nicht geklappt hat, aber aus Erfahrung weis ich das das nichts zu sagen hat.



  • Eisbehr schrieb:

    Und wie benutz ich des jetzt? Was da in der MSDN steht bringt mich kein stück weiter. Woher soll ich wissen welche flags ich zu benutzen hab?
    Ich bekomme vom Compiler nur diese Meldung wenn ich versuche die Funktion zu benutzen.

    error C2664: 'MultiByteToWideChar': Konvertierung des Parameters 3 von 'std::string' in 'LPCSTR' nicht möglich
    Kein benutzerdefinierter Konvertierungsoperator verfügbar, der diese Konvertierung durchführen kann, oder der Operator kann nicht aufgerufen werden
    

    Verwende die Methode c_str(), um aus einem std::string/std::wstring-Objekt einen C-String zu machen. Da brauchste nix konvertieren.

    $noopy schrieb:

    das mit dem TCAHR sollte in etwa so aussehen:

    const TCHAR* path="C:\\abc.txt";
    const TCHAR* newpath="C:\\Programme\\abc.txt";
    CopyFile(path, newpath, TRUE);
    

    Pappalapapp, so sieht das aus:

    const TCHAR szPath[] = TEXT("C:\\abc.txt");
    const TCHAR szNewPath[] = TEXT("C:\\Programme\\abc.txt");
    CopyFile(szPath, szNewPath, TRUE);
    

    Oder, hier sinnvoller: Du gibst die Pfade direkt mit dem TEXT-Makro in der Funktion an...so wie es hier auch schon vorher x-Mal geschrieben wurde 😞 .



  • CodeFinder schrieb:

    Verwende die Methode c_str(), um aus einem std::string/std::wstring-Objekt einen C-String zu machen. Da brauchste nix konvertieren.

    Nix konvertieren heißt ich brauche kein "MultiByteToWideChar" oder das verwenden von blub.c_str() schmeisst keine Fehlermeldug mehr aus?

    Mein Problem ist ja das ich eine string variable habe (aus Datei ausgelesen) und damit die CopyFile füttern will. Vielleicht hilfts mir wenn ihr da mal ein Konkretes Beispiel dazu bringt.
    Bei blanken Erklärungen versteh ich irgendwie immer nur Bahnhof.

    MfG
    Eisbehr



  • Eisbehr schrieb:

    oder das verwenden von blub.c_str() schmeisst keine Fehlermeldug mehr aus?

    So ist es.

    Eisbehr schrieb:

    Mein Problem ist ja [...]

    Ähm, das ist doch kein Problem ?! ... Also wenn Dein Programm mit UNICODE arbeitet, dann verwende auch entsprechend überall UNICODE-Anweisungen (Beispiel std::wstring statt std::string) und Du hast keine Probleme. Vllt ist es auch anfangs einfacher UNICODE erstmal zu deaktivieren.



  • Wenn der Fragesteller einen ANSI-String aus einer Datei liest und als UNICODE weiter verarbeiten möchte, wird er den String schon irgendwo konvertieren müssen - eben mit "MultiByteToWideChar".



  • mmm schrieb:

    Wenn der Fragesteller einen ANSI-String aus einer Datei liest und als UNICODE weiter verarbeiten möchte, wird er den String schon irgendwo konvertieren müssen - eben mit "MultiByteToWideChar".

    Siehe meinen letzten Satz im voherigen Post, hängt halt davon ab, welchen Zeichensatz er letztendlich verwendet. In Deinem Fall muss er konvertieren, klar 😉 .


Anmelden zum Antworten