1

我在验证 REGISTER.txt 是否存在用于函数中的输入时遇到问题(见下文)。我的理解是,如果文件不存在,那么文件将不会被打开并且文件流变量(inData)将为假。因此,我可以在 if/else 语句中使用该变量来验证它是否打开。但即使 REGISTER.txt 与我的 .cpp 文件位于同一目录中,我的代码仍然显示它没有打开。

事情是这样的。当我在 Dev-C++ 编译器中运行相同的代码时,它工作正常并且找到了文件。现在,我知道编译器是不同的,但我不明白是什么导致了这里的差异。我首选的 IDE 是 Xcode,所以我想学习如何在 Xcode 中对文件进行 I/O。

在此先感谢您的帮助。

PS我的Xcode项目引用了该文件,所以它不像该项目没有与该文件连接。

void ReadVehicleRegInfo(char& vehicleType, string& licensePlate,
                    int& modelYear, float& origTaxValue, bool& error)
{
    ifstream inData;

    string inputFile = "REGISTER.txt";
    inData.open(inputFile.c_str());        //File contains registration info

    if (!inData) {
        //File does not exist. Exit function
        cout << inputFile << " does not exist. Program will now terminate"
             << endl << endl;
        error = true;

        return;
    } else {
        //File exists - continue with program
        cout << inputFile << " found";
    }

    inData.close();
}

在我的 main() 函数中,我有以下代码向用户发出发生错误的信号:

if (error) {
    //Function encountered error. Exits program
    system("PAUSE");
    return 99;
}

编辑 我花了 40 分钟试图弄清楚这一点,15 分钟写了这个问题,在我发布它 5 分钟后,我取得了巨大的进步。你不喜欢吗?

我把完整的目录放到文件中,就成功了。

然而,这并不理想。下一个问题是我如何避免这样做?Xcode 的默认目录是什么?

4

2 回答 2

1

通常它是您的程序所在的目录。如果要确保,请使用 _getcwd 获取当前目录或仅包含父目录。

char *_getcwd( char *buffer, int maxlen );

但是,您应该尽量不要使用完整路径,因为在另一台计算机上运行程序时它可能不一样。

于 2013-10-30T03:04:43.793 回答
0

REGISTER.txt 与我的 .cpp 文件位于同一目录中

REGISTER.txt 需要与二进制文件位于同一目录中(构建/发布或其他位置,具体取决于您的构建设置)

于 2013-10-30T04:24:20.507 回答