【问题标题】:How to open a text file that's not in the same folder?如何打开不在同一文件夹中的文本文件?
【发布时间】:2010-05-27 21:49:53
【问题描述】:

由于 C 不是我用来编程的语言,我不知道该怎么做。

我有一个项目文件夹,其中包含所有 .c 和 .h 文件和一个 conf 文件夹,在该文件夹下有一个 config.txt 文件可供读取。怎么打开?

FILE* fp = fopen("/conf/config.txt", "r");

if (fp != NULL)
{
    //do stuff
}

else
   printf("couldn't open file\n");

我不断收到错误消息。为什么?

顺便说一句,这只能在windows上工作,而不是linux。

谢谢。

【问题讨论】:

    标签: c file io


    【解决方案1】:

    简单的方法是使用绝对路径...

    my_file = fopen("/path/to/my/file.txt", "r");
    

    或者您可以使用相对路径。如果您的可执行文件在/home/me/bin 中,而您的txt 文件在/home/me/doc 中,那么您的相对路径可能类似于

    my_file = fopen("../doc/my_file.txt", "r");
    

    在相对路径中要记住的重要一点是,当可执行文件运行时,它是相对于当前工作目录的。因此,如果您使用上述相对路径,但您在 /tmp 目录中并运行 /home/me/bin/myprog,它将尝试打开可能不存在的 /tmp/../doc/my_file.txt(或 /doc/my_file.txt)。

    更可靠的选择是将文件的路径作为程序的参数,并将其作为第一个参数传递给fopen。最简单的例子是只使用main的参数中的argv[1],即

    int main(int argc, char **argv)
    {
        FILE *my_file = fopen(argv[1], "r");
        /* ... */
        return 0;
    }
    

    当然,您需要进行错误检查以验证 argc > 2 等。

    【讨论】:

    • 我需要使用相对路径。我在 conf 文件夹中有该文件,并尝试了 FILE* fp = fopen("/conf/config.txt", "r") 但没有奏效。
    • @nunos:那不是相对路径。相对路径以. 开头,表示当前工作目录,或者以.. 开头,表示当前工作目录上方 的目录。也就是说,如果你在/tmp/foo,那么.指的是/tmp/foo,而..指的是/tmp。那么./bar.txt 将表示/tmp/foo/bar.txt
    • @nunos:是的,相对目录语法在 Windows 和 Unix 中是一样的。
    【解决方案2】:

    您可能会想要查看dirent 系列的目录遍历例程。

    【讨论】:

      【解决方案3】:

      .c.h 文件的位置并不是真正的问题;问题是您运行可执行文件时的当前工作目录。

      您不能将完整路径传递给fopen() 函数吗?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-01-15
        • 1970-01-01
        • 2020-03-29
        • 2015-08-06
        • 1970-01-01
        • 2019-02-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多