我正在遍历一个目录,当某个项目符合某些条件时,我将其删除。我可以在循环内安全地执行此操作,还是必须将路径保存在数组中并稍后删除?
我没有找到相关信息boost::文件系统文档 http://www.boost.org/doc/libs/1_52_0/libs/filesystem/doc/index.htm.
引用附注的第一部分boost::filesystem::directory_iterator 的文档 http://www.boost.org/doc/libs/1_54_0/libs/filesystem/doc/reference.html#Class-directory_iterator(重点是我自己的):
执行目录迭代的程序可能希望测试通过取消引用目录迭代器获得的路径是否确实存在。它可能是指向不存在文件的符号链接。程序递归地遍历目录树以删除并重命名entries可能希望避免遵循符号链接。
我清楚地意识到,为了删除文件而迭代目录是官方支持的用例,因此不会使迭代器失效。另外,引用该注释的第二部分:
如果在构建目录的 Directory_iterator 之后从目录中删除文件或将文件添加到目录中,则未指定迭代器的后续递增是否会导致其值是已删除或添加的目录条目的迭代器。请参阅 ISO/IEC 9945 readdir_r()。
这是关于在目录上迭代时是否会出现已删除文件的非常具体的声明。再次,我明白迭代过程本身在任何情况下仍然有效。
注意ISO/IEC 9945 http://pubs.opengroup.org/onlinepubs/000095399/functions/readdir_r.html有类似的措辞。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)