如何从文件URL获取目录?

时间:2019-01-09 00:45:16

标签: swift macos

我有一个Swift类,该类需要能够接收目录URL或文件URL。在第二种情况下,它必须获取文件的目录URL并从那里开始工作。

我有以下代码:

public class ImageManager {
    private var _file_manager: FileManager
    private var _directory : URL;
    private var _images : [URL];

    init(url: URL) throws {
        _file_manager = FileManager.default;
        if (url.hasDirectoryPath) {
            _directory = url;
        } else {
            _directory = URL.init(fileURLWithPath: url.deletingLastPathComponent().path, isDirectory: true);
        }
        let options = FileManager.DirectoryEnumerationOptions.skipsHiddenFiles;
        let files = try _file_manager.contentsOfDirectory(at: _directory, includingPropertiesForKeys: nil, options: options);
        _images = files.filter(ImageManager.isImageFile);
        if (_images.count == 0) {
            throw ImageManagerError.NoImagesInDirectory(url: _directory);
        }
        //rest of init...
    }

    //rest of class...
}

如果传递的url参数是目录,则一切正常。但是,如果url参数来自文件,则行let files = try _file_manager.contentsOfDirectory(at: _directory, includingPropertiesForKeys: nil, options: options);会引发以下异常:

  

Error Domain = NSCocoaErrorDomain

     

Code = 257“无法打开文件“壁纸”,因为您没有查看权限。”

     

UserInfo = {

     

NSURL = file:/// Users / asanzana / Pictures / Wallpapers,

     

NSFilePath = /用户/ asanzana /图片/墙纸,

     

NSUnderlyingError = 0x600000c72c70 {

     

Error Domain = NSPOSIXErrorDomain

     

代码= 1“不允许操作”}}

那么,在Swift中获取文件包含目录作为URL的正确方法是什么?请记住,这是用于 macOS ,而不是iOS。

0 个答案:

没有答案