Zept
Zept

Reputation: 1198

fileExistsAtPath check for filename?

How to check whether there is a file in a directory with only the name without extension? Now the files are written in my directory, their name will be generated from the id file. Accordingly, when I'm looking for a file, let file = "\ (fileId) .pdf", in the directory it is, but if no extension, it will not be found. Either return as easier extension from the server?

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

Upvotes: 0

Views: 500

Answers (2)

Code Different
Code Different

Reputation: 93191

enumeratorAtPath creates a deep enumerator -- i.e. it will scan contents of subfolders and their subfolders too. For a shallow search, user 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
    }
}

Upvotes: 1

Roy K
Roy K

Reputation: 3319

What about iterating over the files in the directory and testing the name with extension excluded?

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
}

In terms of time complexity is will be O(n), however, as long as there are not too many files, you are good to go. On the other hand, if there are many files, you will need to consider a more efficient way to traverse, may be a trie data structure consisted of all file names in that directory.

Upvotes: 0

Related Questions