如何获取从命令行参数调用的文件的目录
How to get directory of a file which is called from command line argument?
例如,我在ubuntu中调用我的可执行文件:
./foo temp/game1.txt temp/game2 txt
我正在使用 realpath() 来查找通往游戏 1.txt 的路径。但是,使用它将为您提供完整的路径,包括 game1.txt 名称。例如,它将以
/home/*/下载/temp/game1.txt
我想擦除该字符串上的 game1.txt,以便我可以使用该字符串使用它来输出该文件夹中的其他文件。两个问题。
- realpath() 可以用于这种操作吗?有更好的方法吗?
- 有人可以给我一种快速擦除"game1.txt"的方法,以便字符串以字符串格式(不是字符)保存为"/home/*/Download/temp/"?
谢谢。
真的不了解 Linux,但第二个问题的一般方法:
#include <string>
#include <iostream>
int main(){
std::string fullpath("/home/*/Download/temp/game1.txt");
size_t last = fullpath.find_last_of('/');
std::string path = fullpath.substr(0,last+1);
std::cout << path;
}
见 在 Ideone 上。
您可以使用 dirname 函数来实现此目的: http://linux.die.net/man/3/dirname
请注意,dirname 将擦除尾部斜杠(根目录除外);当您附加文件名时,您必须重新附加斜杠。
此外,您实际上不需要为此目的使用 realpath,您可以简单地使用传入的参数,dirname 会给你"temp",你可以将文件名附加到其中。
man -S3 dirname
应该做你想做的事
跨平台解决方案是
QFileInfo target_file_name(argv[1]);
QString absolute_path = target_file_name.absolutePath()
// e.g. /home/username/
QString some_other_file = QString("%1/another_file.txt").arg(absolute_path)
// => /home/username/another_file.txt
Boost.Filesystem也可以很容易地做到这一点。我只是发现QFileInfo的文档很容易导航。
http://doc.qt.nokia.com/4.6/qfileinfo.html#absolutePath
相关文章:
- 为什么即使我调用参数化构造函数也会调用默认构造函数?
- 什么是仅调用一次并调用参数的控制台应用
- 调用参数排列不变函数 f(i++, i++)
- 调用参数不是原子参数的函数是此代码引发异常的原因吗?
- 如何使可调用参数的签名在C++模板中可见?
- x64 函数调用参数推送/移动顺序 (MSVC)
- 如何调用参数由另一个函数生成的函数?
- 从从可调用参数创建的线程对象参数移动构造 C++11 线程
- 正确调用参数化 std::函数
- 是否允许在调用参数中使用类型名 T
- 我不知道如何调用参数为节点类型的函数
- 函数调用参数列表 (C++) 中的空格
- Valgrind 错误:系统调用参数 epoll_pwait(sigmask) 指向不可寻址的字节
- 这C++代码如何让我调用参数数量错误的函数
- 在计算后,在基类之后调用参数化构造函数
- NPAPI调用参数包装
- 在类组合中调用参数化构造函数
- 为什么在创建类对象数组时不能调用参数化构造函数?
- 如何在 for 循环中调用参数化构造函数
- 如何在PIMPL设计模式中调用参数化构造函数