【问题标题】:How can I get my Cocoa command line tool to know the working path that it was called from in the terminal?如何让我的 Cocoa 命令行工具知道在终端中调用它的工作路径?
【发布时间】:2013-02-24 20:10:56
【问题描述】:

我的 cocoa 命令行程序的目标是获取一个作为文件名的参数并将其导入程序进行解析。我希望能够在 mac os 中从终端调用我的程序,比如“ParseFile”,参数为“Filename.txt”(example$ ParseFile filename.txt),但到目前为止我不明白我的程序是如何知道的Filename.txt 的绝对路径。

例如,当您使用 'cp filename.txt /whateverfolder/filename2.txt' 时,您会将文件 'filename.txt' 从终端的当前工作目录 复制到名为whateverfolder 的文件夹中在根目录上。 cp怎么知道filename.txt的绝对路径?如果我的桌面上有 filename.txt,cp 就会知道我发送了它/Users/username/Desktop/filename.txt。这就是我希望我的程序知道的。

我已经能够让我的程序知道它在哪里执行,但这与 bash 终端的当前工作目录在被调用时所处的位置有很大不同。

我该如何解决这个问题?非常感谢

【问题讨论】:

  • 什么是“Cocoa 命令行工具”?
  • 一个基于基础框架而没有任何 gui 的目标 c 可执行文件

标签: cocoa bash path command-line-tool


【解决方案1】:

使用NSFileManagercurrentDirectoryPath方法:

NSString *currentpath = [[NSFileManager defaultManager] currentDirectoryPath];

【讨论】:

  • 谢谢,这正是我需要的,我没有意识到 NSFileManager 有这个非常感谢!
【解决方案2】:

cp怎么知道filename.txt的绝对路径?

它不知道,也不必知道。它可以只使用相对路径。当前工作目录继承自父进程。

我已经能够让我的程序知道它在哪里执行,但这与 bash 终端的当前工作目录在被调用时所处的位置有很大不同。

什么意思?可执行文件所在的目录?这通常没有太大的兴趣。在此上下文中起作用的唯一其他目录是当前工作目录。如果你已经得到了,你还需要什么?

【讨论】:

  • 扩展cp不必知道:它是内核解析实际磁盘文件的路径,内核知道进程的工作目录,因此可以解析相对路径。也就是说,nneonneo 的回答在为您的程序提供学习工作目录的方法方面也是正确的,但通常不必这样做。
猜你喜欢
  • 1970-01-01
  • 2019-05-27
  • 1970-01-01
  • 2013-06-01
  • 1970-01-01
  • 2022-11-08
  • 1970-01-01
  • 2021-01-06
  • 2023-03-29
相关资源
最近更新 更多