C++Win32 API删除带有进度条的文件

C++ Win32 API Delete file with progress bar

本文关键字:文件 API 删除 C++Win32      更新时间:2023-10-16

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

编辑:应该更具体一点,我想把文件移到回收站,并显示一个类似于探索的进度条,尽管我可能希望进度条在控制台或其他地方,所以我不想要一个确切的复制品。

编辑2:是的,我想这是即时的,应该在我问这个问题之前测试过。不管怎样,结束这个问题?

使用带有FO_DELETE函数和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(例如,在控制台窗口中显示进度)。

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

[更新]刚刚测试;其他人是对的。删除索引节点(delete)在1gb文件上是即时的。