我想知道是否可以打开目录,然后与fopen一起从中打开文件。如示例中:
我有一个Maindir,其中有file.txt,所以我想做以下操作:
void openFile(const char * filename)
{
opendir(MAINDIR);
fopen(filename, "r");
}
int main()
{
openFile("file.txt");
return 0;
}
我知道我可以做: fopen("路径/to/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" );
}
尽管您可能希望它返回某物。
opendir
用于读取目录的内容,这不会改变相对路径的解决方式。要更改相对路径的起点,您必须使用chdir
:
chdir(MAINDIR);
...fopen(relative_path,...);
opendir()
函数无法完成您想要的工作。在可用的地方(不是无处不在,正如POSIX所指定的那样,而不是C),它提供了一种读取目录条目的方法,但它不会影响文件名分辨率,该文件始终是针对当前工作目录(至少)执行的在提供opendir()
的实现中。
另一方面,POSIX环境提供chdir()
,更改当前的工作目录,因此是解决相对文件名的基础。那可以实现您的要求。但是,请注意,工作目录是整个过程的属性。通常是一个更好的主意