奇怪的fstream问题

时间:2010-05-09 19:26:58

标签: c++ fstream

我真的很奇怪。在Visual C ++ express中,我有非常简单的代码,只需:

#include <fstream>
using namespace std;
int main()
{
fstream file;
file.open("test.txt");
file<<"Hello";
file.close();
}

这个相同的代码在我的一个项目中正常工作,但是当我现在创建项目并使用相同的代码行时,不会创建文件test.txt。请问,有什么问题?¨

编辑:我希望在VS2008 / project_name / debug中看到test.txt - 就像第一个功能项目一样。

5 个答案:

答案 0 :(得分:3)

写入文件的规范代码:

#include <fstream>
#include <iostream>
using namespace std;

int main() {
    ofstream file;
    file.open("test.txt");
    if ( ! file.is_open() ) {
       cerr << "open error\n";
    }

    if ( ! (  file << "Hello" ) ) {
       cerr << "write error\n";
    }

   file.close();

}

每当您执行文件I / O时,您必须测试每个操作,可能的例外是关闭文件,通常无法从中恢复。

至于在其他地方创建的文件 - 只需给它一个奇怪的名称,如mxyzptlk.txt,然后使用Windows资源管理器搜索它。

答案 1 :(得分:2)

也许可执行文件运行在与以前不同的目录中,使得test.txt出现在其他地方。尝试使用绝对路径,例如"C:\\Users\\NoName\\Desktop\\test.txt"(需要双反斜杠作为C字符串中的转义字符。)

答案 2 :(得分:2)

fstream::open()有两个参数:filenamemode。由于您没有提供第二个,您可能希望检查fstream中的默认参数是什么,或者自己提供ios_base::out

此外,您可能希望检查文件是否已打开。您可能没有当前工作目录中的写权限(其中'test.txt'将被写入,因为您没有提供绝对路径)。 fstream提供is_open()方法作为检查此方法的一种方式。

最后,考虑缩进代码。虽然那里只有几行,但如果没有适当的缩进,代码很快就会变得难以阅读。示例代码:

#include <fstream>
using namespace std;
int main()
{
    fstream file;
    file.open("test.txt", ios_base::out);
    if (not file.is_open())
    {
        // Your error-handling code here
    }
    file << "Hello";
    file.close();
}

答案 3 :(得分:1)

您可以使用Process Monitor并过滤文件访问和您的过程,以确定打开/写入是否成功以及磁盘上的位置是否正在发生。

答案 4 :(得分:1)

有两种解决方法。要么:

file.open(“test.txt”,ios :: out)

#include <fstream>

using namespace std;

int main()
{
    fstream file;
    file.open("test.txt", ios::out);
    file<<"Hello";
    file.close();
}

或者你可以创建一个ofstream而不是fstream。

#include <fstream>

using namespace std;

int main()
{
    ofstream file;
    file.open("test.txt");
    file<<"Hello";
    file.close();
}