【问题标题】:How to get the path of user's special folder in macOS?如何在 macOS 中获取用户特殊文件夹的路径?
【发布时间】:2017-01-10 09:10:21
【问题描述】:

是否有任何 API 可以获取用户的特殊文件夹,例如 macOS 中的 Downloads 或 Documents 文件夹?

【问题讨论】:

标签: objective-c swift macos


【解决方案1】:

根据我的经验,我通常用于按照以下示例获取主目录路径。

第一种方式:

NSArray * paths = NSSearchPathForDirectoriesInDomains (NSDesktopDirectory, NSUserDomainMask, YES);
NSString * desktopPath = [paths objectAtIndex:0];

桌面版: NSDesktopDirectory

对于文档: NSDocumentDirectory

下载: NSDownloadsDirectory

第二种方式:

不是最好的方法,但我们也可以通过这种方法获得路径。

使用不同语言的本地化。

当前用户的$Home目录:

[NSURL fileURLWithPath:NSHomeDirectory()];

$Home/Desktop

[NSURL fileURLWithPath:[NSHomeDirectory() stringByAppendingPathComponent:@"Desktop"]];

$Home/文档:

[NSURL fileURLWithPath:[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"]];

$Home/下载:

[NSURL fileURLWithPath:[NSHomeDirectory() stringByAppendingPathComponent:@"Downloads"]];

希望这将帮助您找到特殊的文件夹路径。

【讨论】:

  • 使用 NSFileManager defaultManager 更适合查找 Desktop、Documents 等,无需附加字符串组件。
  • ... 无论应用程序是否被沙盒化,它都能正常工作,返回相应配置的适当路径。
  • "stringByAppending" 不保证有效。意大利用户可能没有名为 Desktop 的文件夹,对于任何用户,这些文件夹可能会在未来的操作系统版本中更改其位置。
  • 我不建议使用字符串,但为清楚起见,文件夹名称并未以这种方式本地化。意大利人或任何其他本地化用户也将具有相同的文件夹名称,只是在 Finder 中以不同的名称显示。
  • 谢谢。它帮助我找到正确的路径。按预期工作
【解决方案2】:

正如其他人已经提到的,更现代的方法是使用NSFileManager 检索URL

NSURL *desktopUrl = [NSFileManager.defaultManager URLsForDirectory:NSDesktopDirectory inDomains:NSUserDomainMask].firstObject;

【讨论】:

    【解决方案3】:

    用于 Swift 5.x 的桌面:

    var DesktopDir : String = {
        let paths = NSSearchPathForDirectoriesInDomains(.desktopDirectory, .userDomainMask, true)
        return paths[0]
    }()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-09-22
      • 1970-01-01
      • 2011-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多