美文网首页Swift
Swift 文件夹/文件管理系统代码

Swift 文件夹/文件管理系统代码

作者: Hellolad | 来源:发表于2017-10-27 11:53 被阅读17次
    /**
     *  创建文件夹主目录
     */
    @discardableResult
    func createMainDirectory(dirName: String) -> URL? {
        let path: URL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
        let historyURL = path.appendingPathComponent(dirName)
        return createSubDir(pathURL: historyURL)
    }
    
    /**
     *  创建文件夹下的子目录
     */
    @discardableResult
    func createSubDir(pathURL: URL?) -> URL? {
        guard let pathURL = pathURL else { return nil }
        do {
            try FileManager.default.createDirectory(at: pathURL,
                                                    withIntermediateDirectories: true,
                                                    attributes: nil)
            print("\(pathURL) 创建成功")
            return pathURL
        } catch {
            print("\(pathURL) 创建失败")
            return nil
        }
    }
    
    /**
     *  查找到对应名字的文件夹
     */
    @discardableResult
    func findSpecificDir(dName: String?, mainDir: URL?) -> URL? {
        guard let dName = dName else { return nil }
        guard let mainDir = mainDir else { return nil }
        do {
            let subPaths: [URL] = try FileManager.default.contentsOfDirectory(at: mainDir, includingPropertiesForKeys: nil, options: .skipsHiddenFiles)
            let fileterPaths = subPaths.filter { url in
                return url.absoluteString.hasSuffix(dName+"/")
            }
            guard let specificDir = fileterPaths.first else { return nil }
            print("已找到: \(specificDir)")
            return specificDir
        } catch {
            print("error 没有找到该\(mainDir)下的子文件夹")
            return nil
        }
    }
    
    
    /**
     *  在对应的文件夹下写入数据
     */
    @discardableResult
    func saveFileToDir(dir: URL?, fileName: String?, data: Data?) -> Bool {
        guard let dir = dir, let fileName = fileName, let data = data else { return false }
        let filePath = dir.appendingPathComponent(fileName).absoluteURL
        do {
            try data.write(to: filePath)
            print("数据写入成功 \(filePath.absoluteString)")
            return true
        } catch {
            print("数据写入失败 \(filePath.absoluteString)")
            return false
        }
    }
    
    
    /**
     *  获取到对应文件夹下的所有文件夹
     */
    @discardableResult
    func getDirsFromDir(dir: URL?) -> [URL]? {
        guard let dir = dir else { return nil}
        do {
            let subPaths: [URL] = try FileManager.default.contentsOfDirectory(at: dir, includingPropertiesForKeys: nil, options: .skipsHiddenFiles)
            let filterSubPaths = subPaths.filter { sub in
                return sub.isFileURL
            }
            print("已找到所有文件夹: \(filterSubPaths)")
            return filterSubPaths
        } catch {
            print("error 没有找到该\(dir)下的子文件夹")
            return nil
        }
    }
    
    /**
     *  获取到对应文件夹下的所有的文件夹的名字
     */
    @discardableResult
    func getDirNamesFromDir(dir: URL?) -> [String]? {
        let urls = getDirsFromDir(dir: dir)
        let names = urls?.map { url in
            url.lastPathComponent
        }
        guard let gNames = names else { return nil }
        print(gNames)
        return gNames
    }
    
    
    /**
     *  获取到指定文件夹下的所有文件
     */
    @discardableResult
    func getFilesFromSpecificDir(dir: URL?) -> [URL]? {
        guard let specDir = dir else { return nil }
        do {
            let urls = try FileManager.default.contentsOfDirectory(at: specDir, includingPropertiesForKeys: nil, options: .skipsHiddenFiles)
            let fileterUrls = urls.filter { url in
                return url.isFileURL
            }
            print("获取到指定文件夹下的所有文件 成功: \(fileterUrls)")
            return fileterUrls
        } catch {
            print("获取到指定文件夹下的所有文件 失败")
            return nil
        }
    }
    
    /**
     *  删除指定的文件夹
     */
    @discardableResult
    func removeDir(dir: URL?) -> Bool {
        guard let dir = dir else { return false }
        do {
            try FileManager.default.removeItem(at: dir)
            print("删除 \(dir) 成功")
            return true
        } catch {
            print("删除 \(dir) 失败")
            return false
        }
    }

相关文章

网友评论

    本文标题:Swift 文件夹/文件管理系统代码

    本文链接:https://www.haomeiwen.com/subject/qmyrpxtx.html