阅读文件 - 无法打开

时间:2011-09-17 09:05:37

标签: c++ file-io text-files

我正在尝试用C ++打开一个文件,但它似乎给了我一些麻烦,这是到目前为止处理打开文件的代码:

void CreateHistogram(string str_file, vector<HistogramWord> &result) {
    string line;
    long location;
    HistogramWord newWord;
    const char * filename = str_file.c_str();

    //ifstream myfile (str_file.c_str());
    ifstream myfile (filename);
    //myfile.open(filename);
    if (myfile.is_open()) {
        while (myfile.good()) {
            getline(myfile, line);
            line = clarifyWord(line);

好的,只是为了解释一下,HistogramWord是一个在头文件中定义的结构,从我在在线文档中读到的,文件名必须是const char *类型,所以这就是我已经做好了。已将str_file转换为const char *

现在,我尝试了一些不同的东西,这就是为什么有些代码被注释掉了。当它到达行if (myfile.is_open())时,它总是计算为false。任何人似乎都知道为什么?

谢谢, 布兰登

3 个答案:

答案 0 :(得分:1)

确定IO 101

如果您不提供完整的文件路径但仅提供文件名,则当前工作目录将附加到文件名。

因此,如果你的.exe在C:\ temp中,你从这个目录调用你的程序,你的文件名是test.txt,那么在这种情况下完整的文件名将是C:\ temp \ test.txt

这仅在.exe和test.txt都在C:\ temp下时才有效。

在所有其他情况下,它将失败。你可以使用win API或linux等价创建绝对路径 - 我不知道你在哪个平台上。

现在,为了阅读一个完全打开的文件,这就足够了:

void CreateHistogram(string str_file, vector<HistogramWord> &result) {
string line;
long location;
HistogramWord newWord;

ifstream myfile (str_file.c_str());
if (myfile.is_open()) {
    while (getline(myfile, line)) {
        line = clarifyWord(line);
}
else{
   //throw exception, print error message etc
   throw std::exception(std::string("Couldn't open file : " + str_file).c_str());
}
}

编辑:谢谢@ Shahbaz

答案 1 :(得分:0)

我最好的猜测是Windows“隐藏已知文件类型的扩展名”,因此该文件的名称实际上与您在Windows中的名称不同。例如,如果它是一个.txt文件,并且你将其命名为test.txt,那么实际的名称将是test.txt.txt,这对windows来说是非常愚蠢的。

要更改此设置,请转到我的电脑 - &gt; Toold - &gt;文件夹选项 - &gt;并取消选中“隐藏已知文件类型的扩展名”框。这是为XP。如果你有另一个窗口,它应该或多或少是相同的路径。如果没有看到工具栏,请尝试使用ALT + t(工具)或ALT + f(文件)使其显示。

这个问题让我们很多人在大学第一学期遇到麻烦。

答案 2 :(得分:0)

对我来说,解决此问题的方法是在文件路径中使用正斜杠而不是双反斜杠。

例如

inFile.open("path/to/file.txt")

代替

inFile.open("path\\to\\file.txt")