如何从DIR*结构体中提取目录名?(基于dirent.h定义)
如何从给定的DIR*实例中提取目录名?
首先得给你浇个冷水:根据你提供的DIR结构体定义,你没办法直接从DIR* dir里提取到打开的目录名——因为这个结构体里根本没存这个信息!
为什么不行?
你贴的DIR结构里只有两个成员:
struct dirent ent:这是当前遍历到的目录项(比如某个文件/子目录的信息)struct _WDIR *wdirp:这看起来是Windows平台下的内部句柄(比如mingw的实现)
整个结构里完全没有存储我们调用opendir()时传入的那个目录路径字符串,所以从这个结构体本身是拿不到目录名的。
正确的解决办法
最稳妥、可移植的方式是自己在打开目录时保存路径:
// 先把要打开的目录路径存起来 const char* my_dir_path = "/path/to/your/directory"; DIR* dir = opendir(my_dir_path); // 之后需要目录名的时候,直接用my_dir_path就可以了 printf("当前打开的目录是:%s\n", my_dir_path);
如果是Windows平台,你可能会想着去扒_WDIR内部的内容来获取路径,但这属于依赖私有实现的hack行为——不同编译器、不同版本的_WDIR结构可能完全不一样,代码很容易在更新后崩溃,非常不推荐。
额外提醒
标准C里的DIR是不透明结构,不同操作系统、不同编译器的实现差异极大,你现在贴的只是某一个特定环境下的定义(比如Windows下的mingw),不要依赖这些内部字段来写代码,否则你的代码根本没法跨平台运行。
内容的提问来源于stack exchange,提问作者Phiber
相关产品推荐
相关产品推荐

