C ++ Win32 API Удалить файл с индикатором выполнения - PullRequest
1 голос
/ 14 июня 2011

Используя windows api, есть ли способ удалить большой файл (скажем, 1gb +) и каким-то образом отслеживать прогресс? Я уверен, что это возможно, но я не знаю, с чего начать ..

РЕДАКТИРОВАТЬ: Должно быть более конкретным, я хочу переместить файл в корзину и показать индикатор выполнения, похожий на проводник, хотя мне может потребоваться индикатор выполнения в консоли или что-то, поэтому я не хочу точная копия.

РЕДАКТИРОВАТЬ 2: Да, думаю, это мгновенно, должны были проверить, прежде чем я задал вопрос. В любом случае, чтобы просто закрыть этот вопрос?

Ответы [ 2 ]

5 голосов
/ 14 июня 2011

Используйте SHFileOperation с флагами FO_DELETE и FOF_ALLOWUNDO, чтобы переместить файл в корзину. Ход выполнения будет отображаться автоматически, если вы не укажете 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);

Обновление: Как отмечалось в вопросе редактирования, прогресс не будет отображаться для одного файла, но будет отображаться при переработке всего каталога. Это также не позволяет переопределить пользовательский интерфейс (например, для отображения прогресса в окне консоли).

0 голосов
/ 14 июня 2011

Возможно, вы могли бы постепенно обрезать его, используя SetEndOfFile?http://msdn.microsoft.com/en-us/library/aa365531(v=vs.85).aspx. Затем можно быстро удалить inode (или как он называется в Windows-земле).

[обновление] Только что протестировано;остальные парни правы.Удаление inode (удаление) происходит мгновенно для файла размером 1 ГБ.

...