unterschied variable und direkteingabe????



  • Hi Leute,

    Ich möchte ein Verzeichnis löschen.
    Das geht ja nur wenn ich den Inhalt vorher lösche.
    Genau das machte ich auch bis jetzt auch ohne Probleme.
    Nun habe ich mein Programm erweitert, weil der Ordner nun variable sein soll und nicht mehr fix.

    CString dateien;
    dateien = folder + "\\*.*"; //folder ist eine globale Varibale wo schon C:\testfolder drin steht.
    SHFILEOPSTRUCT shFileDel;
    memset(&shFileDel, 0, sizeof(SHFILEOPSTRUCT));
    shFileDel.hwnd = m_pOwner->m_hWnd;
    shFileDel.wFunc = FO_DELETE;
    shFileDel.pFrom = dateien; //hier übergebe ich die varibale mit dem verzeichnis
    //shFileDel.pFrom = "C:\\testfolder\\*.*"; //hier war die alte version
    shFileDel.fFlags = FOF_FILESONLY | FOF_NOCONFIRMATION;
    if (SHFileOperation(&shFileDel) )
    {
    }
    else
    {
    }
    

    nun habe ich mir auch ausgeben lassen mit einer messsagebox und die verzeichnise sind auf den punkt gleich.
    jedoch wenn ich das mit der variablen mache löscht er nichts, weil es kommt eine windowsfehlermeldung -->
    quellordner oder Laufwerk konnten nicht gelesen werden. oder so.

    Was kann das nun sein?
    Ich weiß schon das ich nicht nur den zeilenumbruch machen darf sondern gleich zwei \. Das sollte es nun auch nicht sein.

    Ich verstehe einfach nicht, dass es direkt funktioniert und mit einer Variablen nicht 😕 😕 😕

    Irgendeine Idee?

    Danke



  • Und der Debugger sagt auch, dass zu dem Zeitpunkt das richtige in der Variable drinsteht?
    Sieht meiner Meinung nach ziemlich identisch aus. 😕



  • Ja waren auch im debugger gleich.

    Habe nun aber eine möglichkeit gefunden wo ich keine Files mehr löschen muss und kann gleich alles löschen.
    So funktioniert das wieder.

    std::string slDirName;
    slDirName = folder;
    
    SHFILEOPSTRUCT sh;
    ZeroMemory(&sh, sizeof(sh));
    
    sh.hwnd = NULL;
    sh.fFlags = FOF_NOCONFIRMATION | FOF_SILENT;
    sh.wFunc = FO_DELETE; // Durchzuführende Operation
    slDirName+='\0'; 
    sh.pFrom = slDirName.c_str(); // Verzeichnis-Name
    sh.pTo = NULL;
    sh.hNameMappings = NULL;
    sh.lpszProgressTitle = NULL;
    SHFileOperation (&sh); // Löschen durchführen
    

Anmelden zum Antworten