使用`ofstream`似乎不会创建也不会写入文件

时间:2012-04-04 20:56:58

标签: c++ file-io ofstream

在模拟结束时,我想将一些结果作为附加行写入数据文件。我正在使用的代码如下,您可以假设outFile已正确分配为std::ofstreamoutput_filestd::string,其中包含文件的有效路径尚不存在,并且打印到文件的变量只是在模拟过程中获取值的int类型。

outFile.open(output_file.c_str(), std::ios::out | std::ios::app );
outFile << num_nodes << ", " << tot_s << ", " << tot_c << ", " << tot_d << std::endl;
outFile.close();

我已检查是否使用ofstream::is_open()函数正确打开文件并返回false。但是,我无法弄清楚为什么。我已经尝试了许多不同的文件名和目录路径,所有这些我都检查过它们是有效的(没有错别字等)

正在编写的文件只是在桌面上我一直创建文件的文件夹中,所以我看不出它是如何成为权限问题的。如果是权限问题,我该如何检查?

否则,还有什么可以阻止它写入文件?

加了:

跟进评论后,在添加对perror()的调用后,它显示“没有此类文件或目录”错误。有问题的文件路径是:

/home/ely/Desktop/Evolutionary_Dynamics/GamesOnCycle/data/test.data

我希望创建此文件,并且该路径中的所有目录都存在,拼写正确等等,并且GamesOnCycle文件夹或其数据子文件夹没有奇怪的权限问题。请注意,它是一个Linux系统(Ubuntu 11.04),因此正斜杠对于文件路径是正确的,除非我遗漏了C ++必须具有w.r.t的东西。文件路径。

2 个答案:

答案 0 :(得分:4)

由于几个原因,这可能会发生。

1)文件已经打开。

2)未创建文件路径中的所有目录。

3)缺少文件权限。

有关其他参考,请参阅When will ofstream::open fail?

答案 1 :(得分:2)

这可能听起来很糟糕,但你是在Windows或Linux上吗?如果你的文件路径是windows,你在字符串中用双“\”定义它,还是只有一个?如果只是一个,那么你就不会把你认为自己的角色放在你的道路上。为安全起见,请使用“/”字符。

所以,如果你有这个:

string pathname = "C:\Users\me\Desktop";

这不是一个有效的路径。您正在将“\ U”,“\ m”和“\ D”转义为您的字符串。你需要这个:

string pathname = "C:\\Users\\me\\Desktop";

string pathname = "C:/Users/me/Desktop";

“/”不是转义字符。

这对我来说很可能。