Xcode 应用程序不再从存储应用程序的文件夹中读取输入

7
这个标题有点冗长,但基本上,我写了一个读取和写入文本文件的应用程序。在整个过程中,它会直接在与我的Xcode派生数据 - >项目 - >构建 - >产品 - >调试文件夹相同的目录中读取和写入文件。这是所有输出和输入的位置。我没有为应用程序设置自定义路径,因此它只保存在应用程序所在的位置。我第一次运行了Apple的Instruments应用程序,以尝试学习如何使用性能分析器。在选择这个应用程序作为Instruments的目标之后不久,我回到了Xcode应用程序来继续运行程序。在Xcode中一切正常。它从文件中读取并将内容打印到与文件夹相同的位置,但如果我尝试通过单击文件并在终端中打开它来运行实际的程序,则不再从该应用程序所在的目录中读取或打印。而是从我的主文件夹中读取和打印。我不知道发生了什么变化或导致它改变,但我希望这是一个简单的修复。我希望应用程序能够再次从其所在的目录中读取文件并将文件打印出来。我不确定这是Xcode设置还是Terminal设置。
任何帮助都将不胜感激。
更新1:尝试了这个方法,但没有成功: 如何将工作目录更改为程序所在位置 目录字段为空,所以我认为这会是解决方案,但是按照建议填写后并没有缓解问题。
更新2:
刚刚尝试删除首选项文件,但仍然没有解决。我愿意给予某人声望。因为我是新成员,所以声望不多,但我会根据对方认为公平的方式进行支付,只要能解决问题。我很绝望,真的不想等2天才解决这个问题。
更新3:
尝试将“Profile(release)”->选项区域中的默认路径更改为更新1中建议的默认变量。没有成功。我开始失去理智。
更新4:
我曾尝试完全删除方案并创建一个新的,希望可能是方案出了问题,但这没有解决问题。在Xcode中运行应用程序时,输入和输出仍然使用工作目录,而在debug文件夹中运行可执行文件则使用home文件夹。
更新5:
刚在旧版iMac和Xcode设置上进行了测试(OS 10.8.5和Xcode 5.1.1),似乎正常工作,读写当前应用程序在debug文件夹中的工作目录。

有人对此有经验吗?即使将运行方案设置为主目录,它仍然存储和读取我的主用户文件夹。非常令人沮丧。我会尝试任何建议。我在想Xcode的设置文件是否在我的计算机上损坏了。 - JosephTLyons
你使用的Xcode版本是什么? - Yuchen
最新的版本是8.1吗?我现在离开电脑,不确定。我下班后可以确认。 - JosephTLyons
1个回答

1

由于某种原因,https://dev59.com/EGrWa4cB1Zd3GeqP_HOE#15537436 提供的解决方案不再适用。可能在 Xcode 8.1 中已经失效。但是下面的方法似乎有效:

#include <iostream>
#include <fstream>
#include <unistd.h>

using namespace std;

int main (int argc, const char * argv[])
{
    // argv[0] returns the full path to the program, in my case "/Users/yuchen/Library/Developer/Xcode/DerivedData/../Debug/test
    string directory(argv[0]);
    // And we want to get rid of the program name `test`
    directory = directory.substr(0, directory.find_last_of("/"));
    // Point the directory to the program directory
    chdir(directory.c_str());

    cout << "Current directory is: " << getcwd(NULL, 0) << endl; // /Users/yuchen/Library/Developer/Xcode/DerivedData/../Debug/

    ifstream fin("hi.txt");
    if (fin.is_open()) cout << "File is Open" << endl;
    else cout << "File is not open" << endl;
    fin.close();

    return 0;
}

还可以参考SOSO。希望这有所帮助。


你也遇到了这个问题吗? - JosephTLyons
1
@joe_04_04 好耶,我也想不出为什么。也许这是苹果故意为之。他们不希望人们从程序目录读取输入文件。 - Yuchen
我发誓我们以前能做到这个。即使在更新后也没有改变,一直到最近都可以正常工作。非常奇怪。 - JosephTLyons
此外,我们能够在 Xcode 中运行应用程序并使用工作目录,但在 Xcode 之外运行应用程序时却不能。也许我应该将其报告给苹果作为一个 bug? - JosephTLyons
1
@joe_04_04 这也可能是由于 MacOS 的更新,而不是 Xcode 本身造成的。是的,请随时提交错误报告并看看他们会说什么。 - Yuchen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接