fileExistsAtPath检查文件名?

时间:2016-12-15 12:14:41

标签: swift nsfilemanager

如何检查目录中是否只有名称没有扩展名的文件?现在文件写在我的目录中,它们的名称将从id文件生成。因此,当我查找文件时,请将file =" \(fileId).pdf",放在目录中,但如果没有扩展名,则无法找到。从服务器返回更容易的扩展?

public var  isDownloaded: Bool {
    let path = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as String
    let url = NSURL(fileURLWithPath: path)
    let filePath = url.URLByAppendingPathComponent("\(fileMessageModel.attachment.id)")!.path!
    let fileManager = NSFileManager.defaultManager()
    return fileManager.fileExistsAtPath(filePath)
}

2 个答案:

答案 0 :(得分:1)

enumeratorAtPath创建一个深度枚举器 - 即它也将扫描子文件夹及其子文件夹的内容。对于浅层搜索,用户contentOfDirectortAtPath

func file(fileName: String, existsAt path: String) -> Bool {
    var isFound = false

    if let pathContents = try? NSFileManager.defaultManager().contentsOfDirectoryAtPath(path) {
        pathContents.forEach { file in
            if (file as NSString).stringByDeletingPathExtension == fileName {
                isFound = true
                return
            }
        }
    }
    return isFound
}

if let path = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).first {
    if file("something", existsAt: path) {
        // The file exists, do something about it
    }
}

答案 1 :(得分:0)

如何迭代目录中的文件并测试名称并排除扩展名?

let filemanager:FileManager = FileManager()
let files = filemanager.enumeratorAtPath(/* your directory path */)
while let file = files?.nextObject() {
    // Remove file name extension
    // Do file name comparison here
}

在时间复杂度方面将是O(n),但是,只要没有太多文件,你就可以去了。另一方面,如果有许多文件,则需要考虑更有效的遍历方式,可能是由该目录中的所有文件名组成的trie数据结构。