XCode上的C ++ ifstream:默认目录在哪里?

时间:2011-09-02 04:01:45

标签: c++ ifstream

好的,这是我第一次在Xcode中编写C ++(我习惯于ObjC),而且我现在已经开始在我的大学开设编程课程了。

我正在尝试打开一个文件(硬编码或来自控制台中的用户输入),无论我尝试什么,它都说文件无法打开(通过错误检查)

我假设它是因为我所拥有的test.txt文件不在假定的根目录中,所以如果是这样的话,根目录是什么?

到目前为止,这是我的代码:

//include files
#include <iostream>
#include <stdio.h>
#include <fstream>

using namespace std;

//Global Variables
short inputPicture[512][512];
short outputPicture[512][512];

//Function Prototypes
void getInput(char* in, char* out);
void initializeArray(ifstream* input);

//Main
int main(){
    //local variables
    char inputFile[32];
    char outputFile[32];

    ifstream input;
    ofstream output;


    getInput(inputFile, outputFile);
    cout << inputFile << endl;//test what was sent back from the function

    input.open(inputFile, ifstream::in);
    if (!input.is_open()){//check to see if the file exists
        cout << "File not found!\n";
        return 1;//if not found, end program
    }

    initializeArray(&input);

    return 0;
}//end Main

//Gets initial input from user
void getInput(char* in, char* out){
    cout << "Please designate input file: ";
    cin >> in;
    cout << "\nPlease designate an output file: ";
    cin >> out;
}//end getInput


//Sets the global array to the information on the input file
void initializeArray(ifstream* input){



}//end initializeArray

如果我正在做其他事情,请告诉我,因为我确信这总是很有可能:)

5 个答案:

答案 0 :(得分:18)

默认目录应该是相对应用程序的工作目录,该目录通常与应用程序所在的位置相同(有时调试器可能会混乱)。

对于简单测试,只需在命令行(或代码)中指定绝对路径。

要获取当前目录(要查看),getcwd() C函数(也可在C ++中使用)将有所帮助。类似的东西:

char * dir = getcwd(NULL, 0); // Platform-dependent, see reference link below    
printf("Current dir: %s", dir);

应该在控制台中显示它。 getcwd函数有一些变化,具体取决于您运行的内容,我没有在Mac上测试,但信息在这里:

http://linux.die.net/man/3/getcwd

答案 1 :(得分:3)

您的可执行文件正在查找文件的“根”目录不是文件系统的实际/根目录,而是可执行文件正在执行的目录...如果您是使用Xcode,这可能会被隐藏在由Xcode自动为您的项目创建的构建目录中,而不是像/Users/XXXXXX/Documents那样的用户主文件夹或主文件夹子目录。

答案 2 :(得分:2)

“default directory”是执行可执行文件的目录。通常,它与可执行文件位于同一文件夹中,但如果您执行诸如在exe上拖放文件之类的操作,则可以更改启动路径。

如果从IDE内部运行程序,路径也会发生变化。 IDE启动可执行文件,因此无法确定它是从哪里执行的。您必须找到存储可执行文件的位置并将文件放在那里,或者使用绝对路径。

答案 3 :(得分:2)

在Xcode (撰写本文时为v7.1.1)侧边栏中,有一个名为&#34; Products&#34;的自动生成的文件夹。在你内部找到你项目的可执行文件(假设你已经至少建立了一次你的项目)。右键单击它&amp;选择&#34;在Finder&#34;中显示。文件夹将在Finder中打开。这是您的计划的工作目录,&amp;您会注意到它实际上并不在您项目的文件夹中。

您可以让Xcode使用不同的目录。在顶部工具栏的左侧,它显示活动构建体系结构旁边的项目名称,单击项目名称&gt;编辑方案......

然后寻找名为&#34;工作目录&#34;在出现的工作表中。勾选复选框&amp;然后选择一个自定义目录。 注意 :确保&#34;运行&#34;选项是该工作表侧栏中的选定选项。

答案 4 :(得分:0)

就我而言,   - getcwd(NULL,0)返回&#34; /&#34;。   - 并且不能使用绝对路径。(它在部署的每个终端上都会发生变化。)

所以我通过ObjC代码获取路径并将其抛给c ++函数。

1.将文件放在xcode项目的顶级目录中。并检查它们是否包含在&#34;目标&#34; - &gt;&#34;构建阶段&#34; - &gt;&#34;复制捆绑资源&#34;。

2.通过ObjC代码获取路径。

NSBundle* bundle = [NSBundle mainBundle];
NSString* resourceDirectoryPath = [bundle bundlePath];
NSString* path = [resourceDirectoryPath stringByAppendingString: @"/"];

3.将它扔给c ++函数。

[self cppFunc:[path UTF8String]];

4.然后你可以在c ++中创建一个绝对文件路径。

std::string file = path(arg) + "filename";

它对我有用。