Frage

Ich bin Programmierung unter C ++, MFC, Fenster.

Ich möchte einen Ordner in den Papierkorb löschen. Wie kann ich das tun?

    CString filePath = directorytoBeDeletePath;
    TCHAR ToBuf[MAX_PATH + 10];
    TCHAR FromBuf[MAX_PATH + 10];
    ZeroMemory(ToBuf, sizeof(ToBuf));
    ZeroMemory(FromBuf, sizeof(FromBuf));

    lstrcpy(FromBuf, filePath);

    SHFILEOPSTRUCT FileOp;
    FileOp.hwnd = NULL
    FileOp.wFunc=FO_DELETE; 
    FileOp.pFrom=FromBuf;
    FileOp.pTo = NULL;
    FileOp.fFlags=FOF_ALLOWUNDO|FOF_NOCONFIRMATION;
    FileOp.hNameMappings=NULL;
    bRet=SHFileOperation(&FileOp);

Jede Sache falsch mit dem Code oben? Er scheiterte immer.

fand ich das Problem: filePath sollte sein: "c: \ abc" nicht "c: \ abc \"

War es hilfreich?

Lösung

Der Rückgabewert von SHFileOperation ist ein int, und soll den Fehlercode angeben. Was bekommen Sie?

Andere Tipps

Ich weiß es nicht der richtige Weg ist, aber wenn man eine Lösung finden können Sie versuchen, diese ..

Download-Datei nircmd.exe oder eine andere exe, das Papierkorb leeren kann.

dann rufen Sie diese Funktionen durch das System ( "nircmd.exe emptybin")

Sie haben eine Lösung gefunden, aber es ist nur durch Zufall funktioniert. Das eigentliche Problem hier ist, dass der pFrom Parameter in einem speziellen Format ist. Nach Ansicht der MSDN-Dokumentation für SHFILEOPTS es eine Liste der Dateipfade gespeichert werden, die jeweils eine null-terminiert und eine zusätzliche null nach dem letzten.

In Ihrem Fall geschieht dies funktioniert, weil die FromBuf Array ist länger als die Dateinamen und alle Einträge werden auf Null initialisiert. Die allgemeine Lösung ist, einen Puffer zu schaffen, die für die Dateinamen lang genug ist, und dann zwei NUL-Zeichen nach hinzufügen. Beachten Sie, dass Windows-Dateinamen können länger als _MAX_PATH, siehe zB https://docs.microsoft.com/en-us/windows/desktop/fileio/naming-a-file#maximum-path-length-limitation

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top