在 Cocoa 中,从不在应用程序包中的本地文件获取二进制数据的正确方法是啥?

Posted

技术标签:

【中文标题】在 Cocoa 中,从不在应用程序包中的本地文件获取二进制数据的正确方法是啥?【英文标题】:In Cocoa, what is the correct way to get binary data from a local file that is not in the app bundle?在 Cocoa 中,从不在应用程序包中的本地文件获取二进制数据的正确方法是什么? 【发布时间】:2021-12-31 22:27:00 【问题描述】:

我的应用程序需要不在应用程序包中的本地磁盘上的音频数据。我看到的所有解决方案都涉及使用 URLSession dataTask 的实例,但是所有这些解决方案都专注于从远程服务器流式传输数据,而不是从本地磁盘获取数据。所有关于 URLSession 的文档似乎也是关于从远程服务器获取数据的。

所以我的问题很简单 - URLSession 实际上是从磁盘而不是通过网络获取二进制文件的正确方法吗?

【问题讨论】:

没那么简单。这取决于应用程序是否被沙盒化。不,URLSession 不是正确的方法。 你要使用的文件在本地磁盘的哪个位置,有没有指向它的URL? @EmilioPelaez 好的,所以如果用户使用模式窗口(NSOpenPanel)选择文件,我现在可以工作了......文件可以在任何目录中。如果我在源代码中硬编码一个 url 路径来测试它虽然不起作用 @EmilioPelaez .... 即将路径传递给'let data = try Data(contentsOf: url)' ...返回一个错误,说没有这样的文件...不知道为什么 @chemFour 那么你需要检查 url 是否有效;如果是这样,但如果它确实指向您有权读取的文件。这就是为什么我之前回答过检查FileManager 文档的原因。 【参考方案1】:

检查FileManager,如果您正在尝试获取数据流InputStream

【讨论】:

以上是关于在 Cocoa 中,从不在应用程序包中的本地文件获取二进制数据的正确方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

jar方式运行项目-读取jar包中的文件

在 Cocoa / Objective C 中保护 xml plist

WP8.1程序开发中,如何加载本地文件资源或安装在程序包中的资源。

Cocoa/iPhone:如何防止凳子在 xib 文件中输出不可本地化的字符串?

不解压直接读取压缩包中的文件

从不在域中的计算机访问共享文件夹