objective-c – 从Sandboxed命令行应用程序获取当前工作目录

objective-c – 从Sandboxed命令行应用程序获取当前工作目录,第1张

概述我现在正在尝试使用Objective-C编写的命令行应用程序. 问题 当应用程序没有沙箱时,我可以使用[[NSFileManager defaultManager] currentDirectoryPath]获取用户调用应用程序的目录. 但是,在沙盒之后,无论从何处调用命令行应用程序,应用程序始终返回当前目录/ Users / {MY_ACCOUNT} / Library / Containers 我现在正在尝试使用Objective-C编写的命令行应用程序.

问题

当应用程序没有沙箱时,我可以使用[[NSfileManager defaultManager] currentDirectoryPath]获取用户调用应用程序的目录.
但是,在沙盒之后,无论从何处调用命令行应用程序,应用程序始终返回当前目录/ Users / {MY_ACCOUNT} / library / Containers / {BUNDLE_IDENTIFIER} / Data.

示例代码

实际上,我想知道用户作为命令参数传递的文件的绝对路径.

因此,例如,当我调用我的命令行应用程序时:

$pwd/Users/MY_ACCOUNT/Desktop$./foo/my_executable subfolder/myfile.txt

以下部分:

NSURL *url = [NSURL fileURLWithfileSystemRepresentation:argv[1] isDirectory:NO relativeToURL:nil];printf("path: %s\n",[[url absoluteURL] fileSystemRepresentation]);

正确返回非沙盒应用程序:

path: /Users/MY_ACCOUNT/Desktop/subfolder/myfile.txt

但在SandBoxed应用程序上:

path: /Users/MY_ACCOUNT/library/Containers/BUNDLE_IDENTIFIER/Data/subfolder/myfile.txt

这当然是不正确的.

有没有其他方法可以在SandBoxed命令行应用程序中获取传递的文件路径参数的正确完整路径?
或者它是不可能的,我只是放弃沙盒我的应用程序更好?

最后,我自己找到了一个解决方案.

[nsprocessInfo processInfo]中的environment属性具有正确的当前用户工作目录,即使该应用程序是沙盒.

NSDictionary *env = [[nsprocessInfo processInfo] environment];Nsstring *currentPath = env[@"PWD"];

至少,当我在Terminal.app中调用该命令时,它可以工作.我不确定这个PWD是否总是存在.

此外,As @ daij-djan在下面指出,我们甚至没有给定参数的读取权限.但是,无论如何,这个问题的问题一旦得到解决.

(如果有人知道如何读取作为参数传递路径的文件的方式,请告诉我作为答案!)

解决方法 AFAIK(我前一段时间试过这个,所以事情可能会改变 – 但我不认为)

即使你弄清楚它们到底在哪里,通过命令行args传递的路径也是不可访问的:/

===>所以:这就是我的回答..这是毫无意义我害怕因为它不起作用

总结

以上是内存溢出为你收集整理的objective-c – 从Sandboxed命令行应用程序获取当前工作目录全部内容,希望文章能够帮你解决objective-c – 从Sandboxed命令行应用程序获取当前工作目录所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1009214.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-22
下一篇2022-05-22

发表评论

登录后才能评论

评论列表(0条)

    保存