使用FindFirstFile / FindNextFile删除文件夹中所有文件的C ++代码

时间:2013-07-23 06:05:52

标签: c++ windows file winapi

我的目标是删除给定文件夹中的所有文件,但不删除文件夹本身。我正在考虑调用FindFirstFile,然后在删除找到的每个文件的同时重复调用FindNextFile,使用以下伪代码:

if(FindFirstFile(FindFileData))
{
    do
    {
        DeleteFile(FindFileData.FileName);
    }
    while(FindNextFile(FindFileData));

    FindClose(FindFileData);   //EDIT for people who didn't see my pseudo-code remark
}

但是现在我在想,如果我允许在该文件夹中进行枚举时删除文件?或者换句话说,我是否需要首先缓存找到的所有文件名然后将其删除,或者如上所示,是否可以执行此操作?

2 个答案:

答案 0 :(得分:2)

是的,您可以使用遍历安全地从文件夹中删除文件 在这些方面,当然提供了API和逻辑细节 对(例如Frerich Raabe的评论)。

因此,您的FindFirstFile会初始化WIN32_FIND_DATA结构 而你的FindNextFile将引用相同的结构 它的寻路目的。只要你不腐败它 你可以随时删除文件。

答案 1 :(得分:1)

FindFirstFile返回一个句柄,如果它有效,应该使用FindClose释放。