2013-10-30 63 views
1

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

尽管如此。当我在Dev-C++编译器中运行相同的确切代码时,它可以正常工作并找到文件。现在,我了解编译器是不同的,但我不明白是什么导致了这里的差异。我最喜欢的IDE是Xcode,所以我想学习如何使用Xcode中的文件进行I/O操作。

在此先感谢您的帮助。

P.S.我的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的默认目录?

回答

0

REGISTER.txt是在同一目录作为我的.cpp文件

REGISTER.txt需要在同一目录中的二进制文件(建立/释放或其他地方根据您的构建设置)

+1

谢谢。为了更进一步,为了更改构建目录,我进入了Product - > Scheme - > Edit Scheme。然后我将工作目录更改为我的cpp和txt文件所在的位置。 –

1

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

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

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