2016-12-15 61 views
0

如何檢查目錄中是否只有名稱沒有擴展名的文件?現在這些文件被寫入我的目錄中,它們的名字將從id文件生成。因此,當我查找一個文件時,讓file =「\(fileId).pdf」在它的目錄中,但是如果沒有擴展名,它將不會被找到。要麼從服務器返回更容易的擴展名?fileExistsAtPath檢查文件名?

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) 
} 

回答

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 
    } 
} 
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數據結構。