2011-06-14 7 views
1

Windows API를 사용하면 큰 파일 (1GB라고 말하면 됨)을 삭제하고 진행 상황을 어떻게 든 모니터링 할 수 있습니까? 나는 가능하다고 확신하지만 어디서부터 시작 해야할지 모르겠다.C++ Win32 API 진행 막대가있는 파일 삭제

EDIT : 더 구체적인 파일이어야하며 파일을 휴지통으로 옮기고 탐구와 비슷한 진행 표시 줄을 보여주고 싶다. 콘솔이나 무언가에서 진도 표시 줄을 원하면 정확한 복제본을 원하지 않을 수 있습니다.

EDIT 2 : 예. 질문을하기 전에 테스트 했어야하는 인스턴트 메시지입니다. 어쨌든이 질문을 닫으시겠습니까?

+0

정말 삭제 하시겠습니까? 아니면 휴지통으로 옮기시겠습니까? 탐색기에서 삭제 표시와 동일한 진행률 막대를 표시하려고합니까? –

+6

파일 삭제시 진행률 표시 줄의 의미는 무엇입니까? 파일 크기에 의존하지 않는 작업입니다. – littleadv

+2

삭제를 말하면 안전한 지우기를 의미합니까? 1Gb + 파일을 삭제하는 것은 파일의 대부분의 데이터가 DeleteFile()에 의해 영향을받지 않기 때문에 1Kb 파일을 삭제하는 것보다 오래 걸리지 않습니다. 실제로 메타 데이터 만 변경하고 있습니다. – Benj

답변

5

FO_DELETE FUNC와 FOF_ALLOWUNDO 플래그를 사용 SHFileOperation 휴지통에 파일을 이동합니다. FOF_SILENT를 지정하지 않으면 진행 상황이 자동으로 표시됩니다.

SHFILEOPSTRUCT fileop = { 0 }; 
fileop.hwnd = hwndMain; /* your window */ 
fileop.wFunc = FO_DELETE; 
fileop.pFrom = szFilePathToDelete; 
fileop.fFlags = FOF_ALLOWUNDO /* | FOF_NOCONFIRMATION to recycle without prompting */; 
int error = SHFileOperation(&fileop); 

업데이트 : 질문 편집에서 언급 한 바와 같이가 진행 단일 파일 표시되지 않습니다하지만 전체 디렉토리를 재활용하는 경우 표시됩니다. 또한 UI를 덮어 쓰지 않아도됩니다 (예 : 콘솔 창에 진행률 표시).

-1

아마도 SetEndOfFile을 사용하여 점진적으로자를 수 있습니까? http://msdn.microsoft.com/en-us/library/aa365531(v=vs.85).aspx. 그런 다음 inode (또는 Windows-land에서 호출 된 것)를 제거하면 신속하게 수행 할 수 있습니다.

[업데이트] 테스트되었습니다. 다른 사람들은 맞습니다. 아이 노드 삭제 (삭제)는 1GB 파일에서 즉시 발생합니다.