【问题标题】:C - opendir + fopenC - opendir + fopen
【发布时间】:2016-12-05 15:30:44
【问题描述】:

我想知道是否可以打开一个目录,然后使用 fopen 从其中打开一个文件。就像在示例中一样:

我有一个 MAINDIR,里面有 file.txt,所以我想执行以下操作:

void openFile(const char * filename)
{
    opendir(MAINDIR);
    fopen(filename, "r");
}

int main()
{
   openFile("file.txt");
   return 0;
}

我知道我可以做到:fopen("path/to/main/dir/filename.txt", "r") 但我想要更通用的东西。打开一个目录,然后让每个 fopen 在该目录中工作

谢谢

【问题讨论】:

  • opendir 不行,试试chdir

标签: c file fopen opendir


【解决方案1】:

您可以使用chdir(const char *) 更改您的工作目录,例如:

chdir("/your/path/")

【讨论】:

    【解决方案2】:

    如果您不喜欢搞乱chdir,您可以在要打开文件时构建完整路径:

    void openFile(const char * filename)
    {
        char fullpath[MAXPATHLEN];
        sprint( fullpath, "%s/%s", MAINDIR, filename );
        fopen( fullpath, "r" );
    }
    

    虽然你可能希望它返回一些东西。

    【讨论】:

      【解决方案3】:

      opendir 用于读取目录的内容,不会改变解析相对路径的方式。要更改相对路径的起点,您必须使用chdir

      chdir(MAINDIR);
      ...fopen(relative_path,...);
      

      【讨论】:

        【解决方案4】:

        opendir() 函数不能满足您的要求。在可用的情况下(不是随处可见,因为它由 POSIX 指定,而不是 C),它提供了一种读取目录条目的方法,但它不影响文件名解析,文件名解析总是针对当前工作目录执行,至少在首先提供opendir() 的实现中。

        另一方面,POSIX 环境提供chdir(),它更改当前工作目录,因此是解析相对文件名的基础。那可以实现您的要求。但是请注意,工作目录是进程范围的属性。构建和使用绝对路径或相对于工作目录的路径通常是一个更好的主意,并在程序启动时保持工作目录不变。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-02-27
          • 2015-06-22
          • 1970-01-01
          • 2010-12-12
          • 2018-10-08
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多