boost :: filesystem :: directory_iterator是否因删除而失效?

eud*_*xos 4 iterator boost-filesystem

我正在遍历一个目录,当一个项目符合某些条件时,我将其删除.我可以在循环内安全地完成它,或者我必须在数组中保存路径并稍后删除吗?

我没有在boost :: filesystem docs中找到相关信息.

jlh*_*jlh 8

引用附加到boost :: filesystem :: directory_iterator文档的注释的第一部分(强调是我自己的):

执行目录迭代的程序可能希望测试通过解引用目录迭代器获得的路径是否实际存在.它可能是指向不存在的文件的符号链接.递归地遍历目录树以便删除和重命名条目的程序可能希望避免遵循符号链接.

我很清楚,为了删除文件而迭代目录是官方支持的用例,因此不会使迭代器无效.另外,引用该说明的第二部分:

如果一个文件被删除或增加到为目录directory_iterator后建一个目录,它是不确定是否将迭代器的后续增量都不会导致一个迭代器,它的值是删除或添加目录条目.参见ISO/IEC 9945 readdir_r().

这是一个非常具体的声明,说明在迭代目录时是否显示已删除的文件.同样,我理解迭代过程本身在任何情况下都是有效的.

请注意,ISO/IEC 9945具有类似的措辞.