boostremoveall文件不存在时
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了boostremoveall文件不存在时相关的知识,希望对你有一定的参考价值。
boostremoveall文件不存在时设置chmod。日志确认,在调用boost::remove_all 的地方打日志, 发现文件和目录都删了一遍,可能是文件重复创建了,因为此时文件的ctime 很新, 排查了所有文件处理函数,都没有可能出现创建的效果,那就是remove_all 的问题remove_all 删除目录时,会先迭代删除子目录和文件, 最后删除本身目录, 而多线程下,有子目录被其它线程删的时候, remove_all 异常退出, 不再继续删除, 这导致了目录遗留的情况。 至于文件目录ctime问题,是由于设置权限chmod 时, 会更新ctime。所以,boostremoveall文件不存在时设置chmod。 参考技术A 如果文件不存在,则可以尝试在系统中搜索该文件,以确保它不存在。如果搜索结果显示文件不存在,则可以尝试使用Windows自带的“添加/删除程序”工具来卸载Boost中的所有组件,或者使用系统的软件卸载工具。C++ ifstream 在不存在文件时工作,如果存在文件则不工作
【中文标题】C++ ifstream 在不存在文件时工作,如果存在文件则不工作【英文标题】:C++ ifstream working when not existing file and not working if existing file 【发布时间】:2016-03-21 15:11:53 【问题描述】:我写了一个代码,它运行完美。但是1周后我再次打开它,我遇到了一个非常有趣的问题,所以这里是:
ifstream file;
file.open("bemenet.txt");
int i = -1;
while (i < SOR)
i++;
file >> termekek[i].termek;
file >> termekek[i].ara;
file >> termekek[i].darab;
file.close();
在这种情况下bemenet.txt
存在,程序已编译,当我尝试运行时:我得到错误代码:0xC0000005
另一种情况是bemenet2.txt
不存在,程序已编译并可以运行,但是当我想查看我从文件中获得的数据时,它运行到无限循环。
你能帮帮我吗?我不知道该怎么办...
【问题讨论】:
嗯,termemek
是怎么声明的?我敢打赌你那里有一个数组溢出......
struct TERMEKEK string termek;整合阿拉;内达拉布; ; TERMEKEK termekek[SOR];
我知道...这不是最好的命名...但是当我编写程序时它可以工作..
没有测试成功读取甚至成功打开文件。 i
在使用前递增,允许缓冲区轻松溢出。
当我运行 bemenet.txt(文件存在)时,我运行程序时出现错误代码,但对于 bemenet2.txt(不存在)它运行的程序出现菜单(我写了菜单)
@user4581301 启动程序时立即出现错误代码
【参考方案1】:
我会选择这样的:
ifstream file;
file.open("bemenet.txt");
TERMEK t ;
std::vector<TERMEK > termekek ;
while (file >> t.termek >> t.ara >> t.darab )
termekek.push_back(t) ;
【讨论】:
vector
是更好的解决方案。不知道为什么我没有提到它。我可以说服你把括号放在 while 循环体周围吗?
你不需要 brtaces,但它们没有害处,并且使代码更清晰【参考方案2】:
ifstream file;
file.open("bemenet.txt");
int i = 0;
while ((i < SOR) && file >> termekek[i].termek >> termekek[i].ara >> termekek[i].darab )
i++;
file.close();
while (file >> termekek[i].termek >> termekek[i].ara >> termekek[i].darab)
将测试您关心的几乎所有 IO 和转换条件——打开失败、文件结束、数据转换失败、各种 IO 读取错误——感谢iostream
的布尔运算符和@987654324 @ 防止溢出。注意i
现在在读取之后和下一次测试之前递增,消除了允许i
超过SOR
的错误的可能性。
【讨论】:
如果您的编码标准或作业允许,请认真考虑 marom 对向量的建议。它减少了很多错误的可能性。 可能你是对的,但是明天我需要给老师做演示,所以我没有足够的时间重写所有代码......我写了一个类似自动售货机的程序,你可以购买,你可以进入管理员模式,你有很多统计数据......以上是关于boostremoveall文件不存在时的主要内容,如果未能解决你的问题,请参考以下文章
openBinaryFile:使用 shellcheck 时不存在(没有这样的文件或目录)