2

我有一个很奇怪的问题。在 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 - 就像第一个功能项目一样。

4

5 回答 5

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 资源管理器搜索它。

于 2010-05-09T21:27:14.143 回答
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();
}
于 2010-05-09T20:56:51.407 回答
2

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

于 2010-05-09T19:31:28.957 回答
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();
}
于 2014-12-21T21:47:02.723 回答
1

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

于 2010-05-09T21:30:54.340 回答