【问题标题】:How to use relative path to open files in C using xcode?如何使用相对路径在 C 中使用 xcode 打开文件?
【发布时间】:2018-11-30 06:04:59
【问题描述】:

我需要为我的决赛制作一个 C 游戏。用户应该输入他想要播放的地图文件。

这是我的简单代码:

int main(){

FILE *map;

char fileToRead[100];

do{
    printf("Insert file name: ");
    fgets(fileToRead, 100, stdin);

    map = fopen("/Users/rajunior/Desktop/map_2.txt", "r");
    //map = fopen(fileToRead, "r");
    printf("%s", fileToRead);

如果我使用硬编码的“map = fopen("/Users/rajunior...)”,它可以工作! 但我需要使用第二个(注释)选项;第一个对我的目的没有用。

换句话说,我需要 fileToRead 与我的 .c 位于同一目录中,但如何?

截图:https://imgur.com/a/DbX9tw4

【问题讨论】:

    标签: c xcode macos relative-path


    【解决方案1】:

    选项 1:安装命令行工具。将 C 文件和文本文件放在同一目录下。打开一个终端窗口。从命令行编译并运行。如果我没记错的话,命令行工具下载可以在Preferences.../Downloads找到。

    选项 2:转到 Product/Scheme/Edit Scheme... 菜单。出现对话框时,选择左侧的Run 和顶部的Options。然后寻找Working Directory。设置工作目录指向文本文件所在的目录。

    【讨论】:

    • 感谢您的宝贵时间。选项 2 我已经尝试过了,但没有成功。我通过 getcwd() 打印了目录,它是正确的,但文件从未打开。我安装了命令行工具,我试图通过终端编译和运行:$ gcc read_files.c -o readFilesRun,但是当我运行它时,它也不起作用。我真的不知道该尝试什么了。考虑安装某种虚拟机并在 Windows 上完成我的任务。 :(
    • 谢谢你,第二个选项对我很有用!最好的问候,丹尼
    【解决方案2】:

    这将是一个评论,但它太长了。

    您需要知道进程运行时的当前目录。如果从 shell 运行它,程序的当前目录将与程序的当前目录相同。如果你从 XCode 中运行它,我不知道目录会是什么,但它可能不会是源代码所在的位置——它可能会在某种构建目录中。

    您的程序可以使用getcwd() 找出它从哪里运行。然后,您将能够告诉如何chdir() 到源所在的目录(只要程序知道源在哪里,因为您以某种方式告诉它——参数或命令行变量,或者……)。或者您可以确定如何创建将在源目录中找到文件的相对路径名。

    可能有一种 XCode(可能是 Objective-C)方式来查找信息,可能是通过 plist。

    我不会为 Mac 编写代码;我只在 Mac 上编写代码,而且我很少运行 XCode。

    【讨论】:

    • 谢谢!我已经试过了。这很奇怪,因为当我打印目录时,它似乎是正确的,但是当我尝试运行程序并读取文件时,它永远不会读取!我真的不知道该尝试什么了。
    • 哦 — fgets() 包含换行符;你需要fileToRead[strcspn(fileToRead, "\n")] = '\0'; 来删除换行符。
    猜你喜欢
    • 2016-03-21
    • 1970-01-01
    • 1970-01-01
    • 2011-02-25
    • 1970-01-01
    • 2017-09-05
    • 2016-05-24
    • 2021-05-31
    • 2016-06-24
    相关资源
    最近更新 更多