我正在用 C++ 编写一个程序,它接受一个文件名作为命令行参数:
>> ./myprogram ../path/to/file.txt
我知道我可以简单地使用 argv[1]
打开一个 fstream,但程序需要有关文件确切位置(即完整路径名)的更多信息。
我考虑过将 argv[1]
附加到 getcwd()
,但很明显,在上面的示例中,您最终会得到 /path/../path/to/file.txt
。不确定 fstream 是否会自动解析该路径,但即使它会自动解析,如果不进行大量字符串处理,我仍然没有完整路径。
当然,如果提供的路径已经是绝对路径,则该方法根本不起作用。由于此程序可能在 Linux/Windows/等平台上运行,因此仅检测起始 '/' 字符将无法确定参数是否为完整路径。
我认为这是处理跨多个操作系统的路径名的一个相当普遍的问题。那么如何检索命令行参数的完整路径名以及如何在操作系统之间处理?
最佳答案
路径名处理是高度特定于操作系统的:有些操作系统只有一个根(例如/在 Unix 上),有些有多个根,如 MS-DOS 的驱动器号;有些可能有符号链接(symbolic link)、硬链接(hard link)或其他类型的链接,这会使遍历变得棘手。有些人甚至可能没有文件“规范”路径的概念(例如,如果一个文件有硬链接(hard link),它有多个名称,没有一个更“规范”)。
如果您曾尝试在 Java 中跨多个操作系统进行路径名操作,您就会明白我的意思:-)。
简而言之,路径名处理是特定于系统的,因此您必须为每个操作系统(系列)单独执行此操作,或使用合适的库。
编辑:
你可以看看Apache Portable Runtime ,或在 Boost(虽然是 C++),两者都有路径名处理函数。
关于c++ - 如何从 C++ 程序中的文件名命令行参数确定完整路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2033908/