文件输入不返回良好

时间:2011-04-23 14:16:57

标签: c++ input fstream

道歉要问这样一个基本问题,但我真的不明白为什么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();
}

2 个答案:

答案 0 :(得分:2)

适合我(使用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

答案 1 :(得分:1)

我在Windows和Linux上测试了你的程序。

案例1

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

案例2

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

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

尝试添加此声明,看看你得到了什么:

cout << "Fail " << In3.fail() << endl;