即使代码看起来正确,也不会创建第二个文件

时间:2020-03-21 12:04:21

标签: c++ error-handling

我正在尝试将一个文本文件中的数据复制到另一个“新”文本文件中。 第一个文本文件已经存在于.cpp文件的目录中。 通过在运行时获取第二个文本文件的名称来创建它。 我面临的问题是我看不到创建的“新”文件。 相同的代码在代码块IDE中起作用(创建了“新”第二个文件),但在Visual Studio中未创建。 请在这里帮助我。

char dat;
string wnam;
ifstream exs;

exs.open("test.txt",ios::in);

cout << "Enter the name of the second file\n";
getline(cin,wnam);

fstream cre;
cre.open(wnam.c_str());

while (exs.get(dat)) {
    cre << dat;
}
cout <<"Done!";

exs.close();
cre.close()

1 个答案:

答案 0 :(得分:1)

否,该代码不“似乎正确”。您会看到,根据文档,用于打开现有文件和创建新文件的功能都应该在发生故障的情况下设置failbit。您似乎根本没有检查任何错误。

程序运行时,“当前目录”不太可能是.cpp文件所在的目录。因此,最有可能发生的是程序的“当前目录”完全不同。 (顺便说一下,这也是在尝试使用不同的IDE时可能有所不同的事情之一。)因此,在该目录中创建了“新”文件,由于您正在查找,所以您看不到它。错误的地方。另外,“ test.txt”的打开失败,因为该目录也不在当前目录中,但是您不知道它,因为您没有检查错误。如果您不总是检查错误,那么您将永远走不通。

除了 总是 检查failbit,还尝试打印当前目录,并在尝试打开它们之前将文件名转换为绝对路径名并显示它们。或尝试使用调试器。调试器是一个了不起的发明。