C ++ Win32 API使用进度条删除文件

时间:2011-06-14 05:11:47

标签: c++ file api winapi delete-file

使用windows api,有没有办法删除大文件(比方说1gb +),并以某种方式监控进度?我确信它可能但我不知道从哪里开始......

编辑:应该更具体,我想将文件移动到回收站,并显示类似于探索的进度条,虽然我可能想要控制台中的进度条或其他东西所以我不想要完全复制品。

编辑2:Yeaah猜测它是即时的,应该在我提出问题之前进行测试。 无论如何只是关闭这个问题?

2 个答案:

答案 0 :(得分:5)

SHFileOperationFO_DELETE func和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);

更新如问题编辑中所述,单个文件不会显示进度,但如果回收整个目录,则会显示进度。这也不允许您覆盖UI(例如,在控制台窗口中显示进度)。

答案 1 :(得分:-1)

也许您可以使用SetEndOfFile逐步截断它? http://msdn.microsoft.com/en-us/library/aa365531(v=vs.85).aspx。然后删除inode(或在Windows-land中调用的任何内容)可以很快完成。

[更新]刚刚测试过;其他人都是对的。在1gb文件中删除inode(删除)是即时的。