【发布时间】:2010-04-14 15:56:56
【问题描述】:
以下代码:
char filename[64];
ifstream input;
cout << "Please enter the filename: " << endl;
cin >> filename;
input.open(filename);
if (!input.is_open())
{
cout << "Opening file " << filename << " failed." << endl;
exit(1);
}
失败,它进入 if() 并退出。这可能是什么原因?我正在使用 Microsoft Visual C++。当我将文件名硬编码为常量时,结果却是乱码:
http://pici.se/pictures/CNQEnwhgo.png
建议?
[编辑]
我设法将它浓缩成这个失败的最小测试用例:
#include <iostream>
#include <fstream>
using namespace std;
int main(int argc, char *argv[]){
ifstream input;
input.open("C:\\test.txt");
if (!input.is_open())
{
cout << "Failed." << endl;
exit(1);
}
return 0;
}
我想知道键盘映射是否可能存在一些差异?我在某些字符集中输入文件名,而文件系统以其他名称知道它?顺便说一句,我使用的是 Windows。
[编辑]感谢您的所有帮助,但我现在放弃了。我将使用 C 风格的 fopen 代替。 :)
[编辑] 天哪。现在觉得自己好傻。原来该文件实际上被命名为 test.txt.txt 并且 Windows 隐藏了第二个 .txt 再次感谢您的所有帮助...
【问题讨论】:
-
什么结果出现了乱码,又是如何产生的?显然发生的是文件没有打开,并且有很多可能的原因。例如,您确定该文件存在吗?
-
字符文件名[64]; operator>>。
-
你打算打开这个输出,不是吗?您没有在
.open()中指定打开模式,默认为out。 -
它最终出现乱码,因为您打印了未初始化变量 filnamn 的内容(在屏幕截图中)。
-
存在的实际文件名与您尝试打开的文件名的大小写完全相同(包括扩展名)?也许尝试先打开一个 ofstream 来创建文件,看看它是否会创建你认为应该的文件,然后打开它进行阅读。