我在Linux上编写C ++程序,我需要更改当前目录。我有一个我想要更改它的目录的名称,我想使用chdir()。但它的参数是一个路径(即包含目录位置的char *)。我没有完整的路径,只是目录的名称。
我已经看到了这个问题:Changing the current directory in Linux using C++
但是,我认为建议的解决方案只有在新目录是当前目录的子目录时才有效 - 否则,如果有更多不同的同名目录,它对我来说没有意义在我的电脑里(请告诉我,如果我错了)。
我不确定我是否清楚,确定,这是一个例子:
-CurrentDirectory
|
- Subdirectory
|
- ... etc.
- AnotherDirectory
在我的opitnion中,如果我想将当前目录更改为子目录,chdir(Subdirectory.c_str())
将起作用。但不是chdir(AnotherDirectory.str())
(与一般的CurrentDirectory没有任何共同之处)。
我知道这个问题必须已在某个地方得到解答,但我无法找到它。
感谢您的时间!
答案 0 :(得分:2)
您可以使用getcwd获取当前目录的绝对路径名。
#include <unistd.h>
char * getcwd(char *buf, size_t bufsize);
要更改为另一个目录,您需要知道另一个目录的绝对路径,或者它的相对路径,例如../someotherdirectory
答案 1 :(得分:0)
首先,您可能有几个子目录(在各种目录中)共享相同的名称(因此您可以同时拥有a/xx/
和b/c/xx/
)
您可以使用nftw(3)在文件树中查找内容,并使用getcwd(2)获取当前目录。您还可以考虑使用opendir(3),readdir(3),closedir(3)来扫描一个目录(并构建要传递给stat(2)的完整路径)
然后,要获得一些“规范”路径,请考虑使用realpath(3)
请注意,glob(3)(另请参阅glob(7)),fnmatch(3),wordexp(3)也可能有用。
答案 2 :(得分:0)
您似乎想要按名称“搜索”目录。我建议使用locate
数据库。您可以在命令行上尝试:
locate AnotherDirectory
这将打印本地磁盘上已编制索引的所有文件和目录。
如果您不知道在哪里查找此目录,使用此数据库可以大大提高性能。您可以在此处阅读有关在何处查找基础文件的信息:https://serverfault.com/questions/454127/where-is-the-updatedb-database-located - 但您也可以使用popen()
运行locate
程序,以获得比直接读取数据库文件更便携的解决方案。
当然,您仍然需要编写应用程序逻辑来处理具有相同名称的多个目录,等等。