c++ - 如何从 C++ 程序中的文件名命令行参数确定完整路径?

标签 c++ operating-system path command-line-arguments

我正在用 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/

相关文章:

operating-system - 电源故障中断究竟发生了什么?

c++ - 如何使用 C++ 解析 vector 的路径

algorithm - 查找<= x 的最长路径(加权无向图)

path - 为什么当我将文件推送到 PathBuf 上时,它会丢失当前目录?

c++ - 删除指向 QMainWindow 的链接时的 Qt 浏览器堆栈

c++ - 使用 gnuplot 制作 3D 曲面图

c++ - 使用 MSHTML 如何将焦点设置在输入字段上?

operating-system - 处理页错误陷阱后的指令指针值

c - 为什么在中断处理程序中使用自旋锁

c++ - 使用C的MySQL varchar中的编码字符缓冲区存储问题