문제

C ++, MFC, Windows에서 프로그래밍 중입니다.

폴더를 Recycle Bin으로 삭제하고 싶습니다. 어떻게 할 수 있습니까?

    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);

위의 코드에 문제가 있습니까? 항상 실패했습니다.

나는 문제를 발견했다 : Filepath는 다음과 같아야한다 : "c : abc"not "c : abc "

도움이 되었습니까?

해결책

ShFileOperation의 리턴 값은 int이며 오류 코드를 지정해야합니다. 당신은 무엇을 얻습니까?

다른 팁

나는 그것이 올바른 방법이 아니라는 것을 알고 있지만 해결책을 찾을 수 없다면 이것을 시도 할 수 있습니다 ..

파일 nircmd.exe 또는 재활용 빈을 비울 수있는 다른 exe를 다운로드하십시오.

그런 다음 시스템별로 이러한 기능을 호출합니다 ( "NIRCMD.exe emptybin").

작동하는 솔루션을 찾았지만 우연 일뿐입니다. 여기서 실제 문제는 pFrom 매개 변수는 특별한 형식입니다. MSDN 문서에 따르면 shfileopts, 파일 경로 목록, 각각은 무효로 종결 된 파일 경로 및 마지막 숫자 후에 추가 널을 저장합니다.

귀하의 경우에는 이런 일이 발생하기 때문입니다 FromBuf 배열은 파일 이름보다 길고 모든 항목이 0으로 초기화됩니다. 보다 일반적인 솔루션은 파일 이름에 충분한 버퍼를 만들고 두 개의 NUL 문자를 추가하는 것입니다. Windows 파일 이름에 유의하십시오 ~할 수 있다 더 길다 _MAX_PATH, 예를 들어 https://docs.microsoft.com/en-us/windows/desktop/fileio/naming-a-file#maximum-path-length-limitation

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top