【问题标题】:File Input Not Returning Good文件输入不返回好
【发布时间】:2011-04-23 14:16:56
【问题描述】:

很抱歉提出这样一个基本问题,但我真的不明白为什么 In3 不好。我想这里有一些我不知道的基本原理

提前致谢

文件“testIn1.txt”的内容是: a b c 一个

我正在使用 MS Visual C++ 2010 Express。

#include <fstream>
#include <iostream>
using namespace std;

int main() {

    ifstream In3;
    ofstream Out3;
    In3.open("testIn1.txt", fstream::in);
    Out3.open("testOut1.txt", fstream::app);
    cout << "Is In3 Good? " << In3.good() << endl;
    cout << "Is OUt3 Good? " << Out3.good() << endl;    
    In3.close();
    Out3.close();
}

【问题讨论】:

  • 如果您在 Unix 中,文件名的大小写(大写/小写)必须与文件系统中实际文件名的大小写匹配。
  • @Random 检查输出文件的实际结束位置。通常,除非您在 IDE 中为应用程序指定工作目录,否则它使用与 .exe 相同的目录
  • @RandomCPlusPlus - 老兄,要清楚。为什么不剪切/粘贴包含输入和输出文件的目录的ls -ltr(或dir,如果你在windows 中)的输出?
  • “你知道我如何检查 VC++ 中的工作目录吗?” - 这是你应该给读者一些礼貌并使用谷歌的时候之一。他们试图帮助你,所以礼貌的做法是通过表现出一些主动为自己寻找答案来做出回应。不要指望人们会简单地用勺子喂你每一个问题出现的每一个问题。这不好。
  • @RandomCPlusPlus - “如果我知道怎么做,我会这样做。对不起”。无意冒犯,但是在您将答案发布给我之前,您是否甚至努力弄清楚该怎么做?在您回复告诉我您不知道并且为此感到抱歉之前,您是否甚至认为在 SO 或 google 上搜索如何执行我的建议的可能性?不要成为无效者并表现出一些主动性。 这就是你学习做事的方式。对问题真正无助与无助(不关心)期望别人填补每一个空白之间是有区别的。

标签: c++ input fstream


【解决方案1】:

为我工作(使用 MinGW g++ 作为编译器):

C:\>echo a b c a > testIn1.txt

C:\>g++ test.cpp -otest.exe

C:\>test
Is In3 Good? 1
Is OUt3 Good? 1

请注意,testIn1.txt 应该与可执行文件位于同一目录中,或者您应该为程序提供文件的路径。如果在运行程序后创建了 testOut1.txt(当然之前不存在),您可以验证您是否在正确的目录中。

我想到的其他一些事情:

  • 输入文件被锁定(正如 Emile 建议的那样)。重新启动会有所帮助,您还可以使用 WhoLockMe 等工具来进一步调查。此外,在这种情况下,删除或重新创建 testIn1.txt 应该会出错。
  • AFAIK,MSVC 使用调试/发布文件夹。根据设置的配置,您可能会运行旧版本的程序,这可能会很混乱。确保您在正确的文件夹中,可能会删除旧的二进制文件和 testIn/testOut 文件并检查时间戳以确保。

要获取文件运行所在的目录,请尝试以下代码 (source):

#include <unistd.h>
char *path=(char*)malloc(1024*sizeof(char));
size_t size;
path=getcwd(path,size);
cout<<"current Path: "<<path<<endl;
free(path);

请注意,MS 编译器可能会抱怨getcwd 和/或unistd.h,在这种情况下尝试_getcwd

【讨论】:

    【解决方案2】:

    我在 Windows 和 Linux 中测试了您的程序。

    案例 1

    该文件在 Windows 和 Linux 中不存在,或者

    案例 2

    在Windows中,如果文件存在应该没有问题,在Linux中,如果Name of File没有输入正确的Case/Caps,那么它可能无法打开。

    如果没有设置流的错误标志(eofbit, failbit and badbit)good() 函数将返回 true。

    尝试添加这个语句,看看你得到了什么:

    cout &lt;&lt; "Fail " &lt;&lt; In3.fail() &lt;&lt; endl;

    【讨论】:

      猜你喜欢
      • 2019-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-10
      • 2013-10-31
      • 1970-01-01
      • 2012-10-12
      • 2014-05-21
      相关资源
      最近更新 更多