#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 - 就像第一个功能项目一样。
答案 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()
有两个参数:filename
和mode
。由于您没有提供第二个,您可能希望检查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();
}