文件输入不返回良好

File Input Not Returning Good

本文关键字:返回 输入 文件      更新时间:2023-10-16

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

Thanks in advance

文件"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();
}

适用于我(使用mingw++作为编译器):

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是在运行程序之后创建的,那么您可以验证您在正确的目录中(当然,之前没有)。

我想到的其他一些事情:

  • 输入文件被锁定(如埃米尔建议)。重启会有帮助,您也可以使用像WhoLockMe这样的工具来进一步调查这个问题。此外,在这种情况下,删除或重新创建testIn1.txt应该会给出一个错误。答:MSVC使用调试/发布文件夹。根据所设置的配置,您可能会运行较旧版本的程序,这可能会非常令人困惑。确保你在正确的文件夹中,可能会删除旧的二进制文件和test/testOut文件,并检查时间戳以确保。

获取文件所在的目录,试试下面的代码(源代码):

#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

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

案例1

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

案例2

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

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

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

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