C++ C++;XCode上的ifstream:默认目录在哪里? 编辑方案
我试图打开一个文件(硬编码或从控制台中的用户输入),无论我尝试什么,它都会说该文件不会打开(通过错误检查) 我假设这是因为test.txt文件不在假定的根目录中,所以如果是这样,根目录是什么 以下是我目前的代码:C++ C++;XCode上的ifstream:默认目录在哪里? 编辑方案,c++,ifstream,C++,Ifstream,我试图打开一个文件(硬编码或从控制台中的用户输入),无论我尝试什么,它都会说该文件不会打开(通过错误检查) 我假设这是因为test.txt文件不在假定的根目录中,所以如果是这样,根目录是什么 以下是我目前的代码: //include files #include <iostream> #include <stdio.h> #include <fstream> using namespace std; //Global Variables short inp
//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
//包含文件
#包括
#包括
#包括
使用名称空间std;
//全局变量
短输入图片[512][512];
短输出图片[512][512];
//功能原型
void getInput(字符*输入,字符*输出);
void initializeArray(ifstream*输入);
//主要
int main(){
//局部变量
字符输入文件[32];
字符输出文件[32];
ifstream输入;
流量输出;
getInput(inputFile,outputFile);
不能根可执行文件在其中查找文件的目录不是文件系统的实际/
根目录,而是可执行文件正在其中执行的目录…如果您使用的是Xcode,则该目录可能隐藏在Xcode为您的项目自动创建的一个生成目录中,而不是用户主文件夹或文件夹中主文件夹子目录,如/Users/XXXXXX/Documents
“默认目录”是执行可执行文件的目录。通常,它与可执行文件位于同一文件夹中,但如果在可执行文件上拖放文件,则可以更改启动路径
如果您从IDE内部运行程序,路径也可能会更改。IDE启动可执行文件,因此不知道从何处执行。您必须找到它存储可执行文件的位置,并将文件放在其中,或者使用绝对路径。默认目录应与应用程序的工作目录相对,这是通常是应用程序所在的同一个位置(调试器有时会弄乱)
对于简单的测试,只需在命令行(或代码)中指定一个绝对路径
要获取当前目录(要查看),可以使用getcwd()
C函数(在C++中也可用)。类似于:
char * dir = getcwd(NULL, 0); // Platform-dependent, see reference link below
printf("Current dir: %s", dir);
这应该会显示在控制台中。getcwd
函数有一些变化,这取决于您在什么平台上运行,我没有在Mac上测试过,但这里有一些信息:
在Xcode(编写本文时为v7.1.1)侧栏中,有一个自动生成的名为“Products”的文件夹。在其中,您可以找到项目的可执行文件(假设您至少构建了一次项目)。右键单击它并选择“Show In Finder”。一个文件夹将在Finder中打开。这是程序的工作目录,您会注意到它实际上不在项目文件夹中
您可以让Xcode使用不同的目录。在顶部工具栏的左侧,在活动生成体系结构旁边显示您的项目名称,单击项目名称>编辑方案
然后在出现的工作表中查找名为“工作目录”的选项。勾选复选框,然后选择一个自定义目录。注意:确保“运行”选项是该工作表边栏中选中的选项。,
-getcwd(NULL,0)返回“/”。
-无法使用A解决方案路径。(它在部署的每个终端上都会更改。)
我通过Objc代码得到路径并将其投向C++函数。
[self cppFunc:[path UTF8String]];
1.将文件放在xcode项目的顶部目录中,并检查它们是否包含在“目标”->“构建阶段”->“复制捆绑资源”中
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";
它对我很有用。好的,我尽可能深入目录,但它仍然找不到文件…mac上的可执行文件是什么样子的?哈哈,也许我找错地方了。可执行文件在mac(或Unix)上没有扩展名,尽管有时它有一个.app扩展名,实际上是一个包(即,它是一种特殊的文件夹结构)。如果Xcode为您的文件创建了一个.app,那么右键单击它并选择查看软件包内容
。其中将有一个MacOSX
目录,该目录中将有一个bin
目录。您的可执行文件应该在其中。否则,如果这是一个简单的命令行应用程序,那么Xcode should有一个默认的构建目录,用于创建编译后的二进制文件。要访问getcwd(),我需要包含什么标题?好的,它可以使用。谢谢。所以,当我打开这个程序时,如果我的教授使用PC运行该程序,我只需确保使用的test.txt和输出文件与.exe一起使用即可?(我知道,这是个愚蠢的问题,但我只是想确定一下。)您不应该需要应该创建的输出文件,我建议在您提交之前将任何绝对路径更改为相对路径。一旦您确定了它试图从何处加载并知道了预期结果,只需将输入文件放在正确的位置和/或包含说明。我可以确认这对xcode 12仍然有效:)