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()
,它 更改 当前工作目录,因此是解析相对文件名的基础。那可以实现您的要求。但是请注意,工作目录是进程范围的 属性。通常最好构造和使用绝对路径或相对于工作目录的路径,并在程序启动时保留工作目录。
我想知道是否可以打开一个目录,然后使用 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()
,它 更改 当前工作目录,因此是解析相对文件名的基础。那可以实现您的要求。但是请注意,工作目录是进程范围的 属性。通常最好构造和使用绝对路径或相对于工作目录的路径,并在程序启动时保留工作目录。