Pfad umwandeln?



  • Irgendwas scheint dann bei dir aber derbst kaputt zu sein!

    Wenn du ne Variable

    char blupp[500];
    strcpy(blupp,"c:\\test\\blupp\\*"); // Die doppelten Backslashes stellen eigentlich nur einen dar, \n z.B. wäre ein Zeilenumbruch, will man aber wirklich als text '\n' im String haben, müsste man hier \\n schreiben.
    

    ...hast du in der Variable blupp "c:\test\blupp\*" stehen
    Die SHFileOperation will bei .pFrom lediglich noch am Ende des Strings eine zusätzliche Nullterminierung haben...



  • Hallo,

    in der Variable "validPath" steht c:\\temp\*

    Die doppelten Backslashes stellen eigentlich nur einen dar, \n z.B. wäre ein >Zeilenumbruch, will man aber wirklich als text '\n' im String haben, müsste >man hier \\n schreiben.

    Danke für den Tipp, aber ich weiss es schon, dass '\' nur einen \ darstellt.

    Die SHFileOperation will bei .pFrom lediglich noch am Ende des Strings eine zusätzliche Nullterminierung haben...

    Ich habe am Anfang so probiert:

    .pFrom = L"C:\temp\test\\*.zip\0"
    

    Aber ich bekomme folgende Fehlermeldung:

    Die Datei kann nicht kopiert werden ... Die Quelle konnte nicht ...

    Seitdem ich aber einen zusätzlichen \ daran hänge, also in Form C:\\temp\\test\\ dann funktioniert es auch. Ich würde mal sagen, dass wir so stehen lassen.

    Danke für Deine Antwort 🙂



  • leonReif schrieb:

    Ich habe am Anfang so probiert:

    .pFrom = L"C:\temp\test\\*.zip\0"
    

    Aber ich bekomme folgende Fehlermeldung:

    Die Datei kann nicht kopiert werden ... Die Quelle konnte nicht ...

    Seitdem ich aber einen zusätzlichen \ daran hänge, also in Form C:\\temp\\test\\ dann funktioniert es auch. Ich würde mal sagen, dass wir so stehen lassen.

    Du hast eben nicht überall ein \\ 😉

    .pFrom = L"C:\\temp\\test\\*.zip\0"
    


  • Hi!

    Du hast eben nicht überall ein ...

    Ich weiss es. Ich sagte doch, das war am Anfang.

    Deshalb:

    int pathIndex = 0;
            int validPathIndex = 0;
    
            for(pathIndex = 0; pathIndex < MAX_PATH; ++pathIndex)
            {
              if(path[pathIndex] != '\0')
              {
                if(path[pathIndex] !='\\')
                {
                  validPath[validPathIndex] = path[pathIndex];
                  validPathIndex++;
                }
                else
                {
                  validPath[validPathIndex] = path[pathIndex];
                  validPath[++validPathIndex] = '\\';
                  validPathIndex++;
                }
              }
              else
              {
                break;
              }
            }
    

    Dann klappt’s auch mit dem Nachbarn 😉



  • Da kann man manchmal echt nur mit dem Kopf schütteln...

    Benutz weiterhin Deine Funktion, aber akzeptiere bitte die Tatsache, das sie unnütz ist, wenn man die Pfade gleich richtig angibt.





  • Hi!

    Sorry, Du hast vollkommen recht 😉

    Ich habe heute morgen gemerkt.

    Ich habe die alte Schleife durch dieser ersetzt:

    wchar_t szSourcePath[MAX_PATH]  = {0};
            char szPath[MAX_PATH] = {0};
    
            //Code ....
    
            strcat(szPath, "*.zip\0");
    
            for(int j = 0; j < MAX_PATH; ++j)
            { 
              if(szPath[j] != '\0')
              {
                szSourcePath[j] = (unsigned short)szPath[j];
              }
              else
              {
                szSourcePath[j] = '\0';
                break;
              }
            }
    




  • leonReif schrieb:

    dEUs schrieb:

    http://www.c-plusplus.net/forum/viewtopic.php?t=39458

    Gut erklärt 😃

    Ironisch gemeint?



  • Was hälst du eigentlich davon:

    wchar_t szSourcePath[MAX_PATH]  = "";
            char szPath[MAX_PATH] = "";
    
            //Code ....
    
            strcat(szPath, "*.zip");
            strcpy(szSourcePath,szPath, strlen(szPath));
    

    Die Schleife ist nämlich sinnlos.



  • dEUs schrieb:

    leonReif schrieb:

    dEUs schrieb:

    http://www.c-plusplus.net/forum/viewtopic.php?t=39458

    Gut erklärt 😃

    Ironisch gemeint?

    Ironisch gemeint?

    Nein auf gar keinen Fall. Ich bin direkt. Wenn mir etwas nicht passt, dann sage ich es ...

    😉



  • Hi!

    Mit

    strcpy
    

    funktioniert nicht, da die Funktion

    strncpy
    

    nur zwei Parameter aufnimmt. Aber es gibt die Funktion

    char *strncpy( char *strDest, const char *strSource, size_t count )
    

    Aber ich bekomme folgende Fehlermeldung bei kompilieren:

    error C2664: 'strncpy' : cannot convert parameter 1 from 'unsigned short [260]' to 'char *'
    

    Ich habe vorher nach eine Funktion gesucht, die man eine unsigned short Array in ein char Array oder umgekehrt konvertieren kann. Deshalb habe ich die Schleife geschreiben!



  • dann nimm strcpy und lass den letzten parameter weg. Und mach vor die ersten beiden ein (char*)



  • Hi!

    Ich habe es gerade probiert.

    Das Ergebnis voher mit der Schleife:

    C:\temp\10.zip

    Das Ergebnis nachher mit strcpy:

    strcpy((char*)szSourcePath, (char*)szPath);
    

    C\ep\.i

    Anscheind gehen Informationen verloren!



  • strcpy frißt Zeichen auf?

    Auch nicht schlecht... da Du sicherlich der erste Entdecker dieses Verhaltens bist, darfst Du diesem Phänomen einen Namen geben.

    ...könnte aber auch sein das Du da schlichtweg überhaupt nicht weißt, was Du da tust und daher einen jenes Verhalten hervorrufende Fehler selber reingebaut hast.

    Ist alles möglich... 😉



  • Ich denke, du brauchst eher sowas wie WideCharToMultiByte



  • Hallo flenders,

    ich danke Dir 😃

    Es funktioniert sehr gut mit

    WideCharToMultiByte
    
    MultiByteToWideChar( CP_ACP, 0, szPath,
    strlen(szPath)+1, szSourcePath, sizeof(szSourcePath)/sizeof(szSourcePath[0]));
    

    Viele Grüße,

    leon 🙂



  • leonReif schrieb:

    Es funktioniert sehr gut mit [cpp]WideCharToMultiByte[/cpp]

    MultiByteToWideChar( CP_ACP, 0, szPath, ...
    

    Der war gut 😃



  • Hepi schrieb:

    ... da Du sicherlich der erste Entdecker dieses Verhaltens bist, darfst Du diesem Phänomen einen Namen geben.

    😃 hihi.. ich lach mich immer wieder futsch ab solchen trockenen kommentaren!!



  • Sorry, war auch mit mein Fehler - er braucht MultiByteToWideChar (hatte mir den Code nicht genau genug angesehen)


Anmelden zum Antworten