Datei kopieren schlägt gelegentlich fehl.



  • Das Kopieren einer Datei schlägt manchmal fehl und ich bin mir nicht sicher warum.
    Die Datei wird aus dem Internet erfolgreich runtergeladen und danach
    noch zusätzlich 1 Sekunde gewartet.

    Manchmal klappt es und manchmal erhalte ich die Nachricht, dass von
    der Quelldatei nicht kopiert wurde..obwohl sie bereits im Verzeichnis liegt.

    CString path1 = "c:\\remote.ini";
    CString pathloc ="c:\\local.ini";
    
    SHFILEOPSTRUCT lpShFileStruct; 
    lpShFileStruct.pFrom = path1;
    lpShFileStruct.pTo = pathloc;
    lpShFileStruct.wFunc = FO_COPY;
    lpShFileStruct.fFlags = FOF_NOCONFIRMMKDIR | FOF_NOCONFIRMATION | FOF_SILENT;
    SHFileOperation(&lpShFileStruct);
    

    Hat jemand von euch eine Idee was ich da noch ändern müsste?



  • Soweit ich mich erinnere, muß der Name der Quelldatei doppelt nullterminiert werden, wenn du ihn an SHFileOperation übergibst (das betrachtet pFrom als eine Liste von möglicherweise mehreren Dateinamen, die jeweils durch \0 abgeschlossen werden - d.h. es kopiert erst die "C:\Remote.ini" und anschließend eine Datei, deren Name aus Datenmüll besteht (letzteres geht ziemlich sicher schief)).



  • Ok, wenn ich das so richtig verstanden habe wird es so nun eher klappen:

    path1 +='\0';
    

    Wobei das dann bei jedem Pfad einer Kopieroperation zu machen wäre.
    Hat mich nur gewundert, dass es mal klappt und mal nicht.
    Woran kann das liegen?

    👍



  • Soweit ich weiss, kann ein CString nicht mehrere \0 haben.

    CString caption = "test";
    
          char str[MAX_PATH];
          strcpy(str, LPCTSTR(caption));
          strcat(str, "\0\0");
    

    Das es manchmal funktioniert hat, liegt wohl daran, dass im "Datenmüll" zufällig ein NULL drinstand.


  • Mod

    Smeagol schrieb:

    Soweit ich weiss, kann ein CString nicht mehrere \0 haben.

    Doch kann es!

    CString str(_T("Test"));
    str += '\0'

    Fügt wirklich eine weitere \0 ein. Intern arbeitet CString nicht mit einer Null-terminierung sondern mit der effektiven Länge!


Anmelden zum Antworten