【问题标题】:Swift 3 Read Terminal Current Working DirectorySwift 3 读取终端当前工作目录
【发布时间】:2017-10-26 20:21:29
【问题描述】:

我想开发一个应用程序来提升在 Mac 上使用终端时的体验。我想从终端获取当前的工作目录(cwd)。如何实现?

我注意到Get terminal output after a command swift 的答案非常好,但似乎仍然无法完美解决我的问题。我从 Apple 的文档 https://developer.apple.com/reference/foundation/process 中学到了 Process().currentDirectoryPath,它可以达到我需要的效果吗?我可以像下面这样使用它吗?

let path = Process().currentDirectoryPath

我对 swift 和 Xcode 很陌生,请帮助我!谢谢!


更新:谢谢你们!似乎两者都

let path = fileManager.default.currentDirectoryPath

Process() 一个临时为我工作。这两者有什么区别吗?

【问题讨论】:

  • 你到底想用这个目录实现什么?
  • @Alexander 我打算获取路径并绘制目录中的所有元素,就像制作一个 GUI。我是一名学生,只想做一个小项目来练习。
  • FileManager.default.currentDirectoryPath 怎么样?
  • @Pang 我应该选择哪一个?文件管理器一还是进程一?我刚拿到我的 Macbook,我还在探索如何使用 xcode。
  • 您是否尝试过您发布的代码?你得到了什么?

标签: macos swift3


【解决方案1】:

我也有同样的问题并选择了后一种选择:

let path = FileManager.default.currentDirectoryPath

为了回答您更新的问题,Process()FileManager 方法之间的区别在于Process().currentDirectoryPath 方法准备创建一个新的子进程,然后告诉您子进程将使用的工作目录。当然,子进程与父进程具有相同的工作目录,但是为了找到工作目录而创建一个新的Process 实例是很浪费的。

一定要使用FileManager 方法,因为它返回当前进程使用的工作目录,而不会创建任何子进程或任何其他开销。

来源:
https://developer.apple.com/documentation/foundation/filemanager/1409234-default
https://developer.apple.com/documentation/foundation/filemanager/1410766-currentdirectorypath

【讨论】:

  • 似乎仍然可以正常工作,但似乎答案得到了一些反对?为什么投反对票?
  • 为了论证,AFAIK 简单地声明一个 Process var 实际上不会派生一个新的子进程,直到你 start() 它才会发生。尽管如此,你是对的,FileManager 方法是正确的方法,即使 Process() 只是浪费一个临时变量。
  • 观察力不错,纪尧姆·洛朗
  • FileManager.default.currentDirectoryPath 不适用于沙盒应用:stackoverflow.com/questions/31476313/…
猜你喜欢
  • 2020-06-10
  • 1970-01-01
  • 2013-06-25
  • 2012-07-22
  • 2015-01-28
  • 1970-01-01
  • 2010-09-18
  • 1970-01-01
  • 2015-06-29
相关资源
最近更新 更多