C-opendir + fopen

C - opendir + fopen

我想知道是否可以打开一个目录,然后使用 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 在该目录中工作

谢谢

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

chdir("/your/path/")

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

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

虽然你可能希望这个 return 一些东西。

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

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

opendir() 函数没有执行您想要的操作。在可用的情况下(不是所有地方,因为它由 POSIX 指定,而不是 C),它提供了一种读取目录条目的方法,但它不影响文件名解析,它总是根据当前工作执行目录,至少在首先提供 opendir() 的实现中是这样。

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