如何获取从命令行参数调用的文件的目录?

发布于 2024-10-31 00:07:41 字数 431 浏览 7 评论 0原文

例如,我在 ubuntu 中调用我的可执行文件:

./foo temp/game1.txt temp/game2 txt

我使用 realpath() 来查找 game1.txt 的路径。 但是使用它会给我完整路径,包括 game1.txt 名称。 例如,它将显示为

/home/*/Download/temp/game1.txt

我想删除该字符串上的 game1.txt,以便我可以使用该字符串来输出其他内容该文件夹中的文件。 两个问题。

  1. realpath() 可以用于这种操作吗?有更好的办法吗?
  2. 有人可以给我一个快速的方法来删除“game1.txt”,以便该字符串将以字符串格式(而不是字符)保存为“/home/*/Download/temp/”吗?

非常感谢。

For example, I am calling my executable in ubuntu:

./foo temp/game1.txt temp/game2 txt

I am using realpath() to find the path to the game1.txt.
Using it however will give me the full path including the game1.txt name.
For example, it will come out as

/home/*/Download/temp/game1.txt

I want to erase game1.txt on that string so that I can use the string to use it to output other files in that folder.
Two questions.

  1. Is realpath() alright to use for this kind of operation? Is there better way?
  2. Can someone give me a quick way to erase "game1.txt" so that the string will be "/home/*/Download/temp/" save in a string format(not char)?

Thank you very much.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

绝情姑娘 2024-11-07 00:07:41

不太了解 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 上查看

Don't really know Linux, but a general way for your second question:

#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;
}

See on Ideone.

尝蛊 2024-11-07 00:07:41

您可以使用 dirname 函数来实现此目的: http://linux.die.net/man/3/ dirname

注意dirname会删除尾部的斜杠(根目录除外);当您附加文件名时,您必须将斜杠附加回来。

另外,您实际上并不需要为此目的使用 realpath,您可以简单地使用传入的参数,dirname 将为您提供“temp”,您可以将文件名附加到其中。

You can use the dirname function for this: http://linux.die.net/man/3/dirname

Note that dirname will erase the trailing slash (except for the root directory); you'll have to append the slash back in when you append the filename.

Also, you don't actually need to use realpath for this purpose, you could simply use the argument as passed in, dirname will give you "temp" and you can append filenames to that.

浅听莫相离 2024-11-07 00:07:41
 man -S3 dirname

应该做你想做的

 man -S3 dirname

should do what you want

倥絔 2024-11-07 00:07:41

跨平台的解决方案是

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

The cross-platform solution is

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 can also do this easily. I just find the documentation of QFileInfo easily to navigate.

http://doc.qt.nokia.com/4.6/qfileinfo.html#absolutePath

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文