source

NSFileManager 파일이 있음AtPath:isDirectory 및 swift

factcode 2023. 9. 1. 21:23
반응형

NSFileManager 파일이 있음AtPath:isDirectory 및 swift

기능을 사용하는 방법을 이해하려고 합니다.fileExistsAtPath:isDirectory:하지만 난 완전히 길을 잃었어요

다음은 제 코드 예입니다.

var b:CMutablePointer<ObjCBool>?

if (fileManager.fileExistsAtPath(fullPath, isDirectory:b! )){
    // how can I use the "b" variable?!
    fileManager.createDirectoryAtURL(dirURL, withIntermediateDirectories: false, attributes: nil, error: nil)
}

나는 어떻게 내가 그 값에 접근할 수 있는지 이해할 수 없습니다.b가변 포인터.설정 여부를 확인하려면 어떻게 해야 합니까?YES또는NO?

두 번째 매개 변수는 다음과 같은 것입니다.UnsafeMutablePointer<ObjCBool>그 말은 당신이 당신의 주소를 전달해야 한다는 것을 의미합니다.ObjCBool변수.예:

var isDir : ObjCBool = false
if fileManager.fileExistsAtPath(fullPath, isDirectory:&isDir) {
    if isDir {
        // file exists and is a directory
    } else {
        // file exists and is not a directory
    }
} else {
    // file does not exist
}

Swift 3 및 Swift 4에 대한 업데이트:

let fileManager = FileManager.default
var isDir : ObjCBool = false
if fileManager.fileExists(atPath: fullPath, isDirectory:&isDir) {
    if isDir.boolValue {
        // file exists and is a directory
    } else {
        // file exists and is not a directory
    }
} else {
    // file does not exist
}

다른 답변을 더 쉽게 사용할 수 있도록 개선하려고 했습니다.

enum Filestatus {
        case isFile
        case isDir
        case isNot
}
extension URL {
    
    
    var filestatus: Filestatus {
        get {
            let filestatus: Filestatus
            var isDir: ObjCBool = false
            if FileManager.default.fileExists(atPath: self.path, isDirectory: &isDir) {
                if isDir.boolValue {
                    // file exists and is a directory
                    filestatus = .isDir
                }
                else {
                    // file exists and is not a directory
                    filestatus = .isFile
                }
            }
            else {
                // file does not exist
                filestatus = .isNot
            }
            return filestatus
        }
    }
}

베이스를 과부하 시키려고요여기 URL을 찍는 제 것이 있습니다.

extension FileManager {

    func directoryExists(atUrl url: URL) -> Bool {
        var isDirectory: ObjCBool = false
        let exists = self.fileExists(atPath: url.path, isDirectory:&isDirectory)
        return exists && isDirectory.boolValue
    }
}

파일 관리자에 간단한 확장자를 추가하여 이 기능을 조금 더 깔끔하게 만들었습니다.도움이 될까요?

extension FileManager {
    
    func directoryExists(_ atPath: String) -> Bool {
        var isDirectory: ObjCBool = false
        let exists = fileExists(atPath: atPath, isDirectory:&isDirectory)
        return exists && isDirectory.boolValue
    }
}

이렇게 작게 썼어요.FileManager이 통화를 보다 신속하게 만드는 내선 번호:

extension FileManager {
  /// Checks if a file or folder at the given URL exists and if it is a directory or a file.
  /// - Parameter path: The path to check.
  /// - Returns: A tuple with the first ``Bool`` representing if the path exists and the second ``Bool`` representing if the found is a directory (`true`) or not (`false`).
  func fileExistsAndIsDirectory(atPath path: String) -> (Bool, Bool) {
    var fileIsDirectory: ObjCBool = false
    let fileExists = FileManager.default.fileExists(atPath: path, isDirectory: &fileIsDirectory)
    return (fileExists, fileIsDirectory.boolValue)
  }
}

용도는 다음과 같습니다.

let filePath = "/Users/Me/Desktop/SomeDirectory"
let (fileExists, fileIsDirectory) = FileManager.default.fileExistsAndIsDirectory(atPath: filePath)
// -> (true: something exists at this path, true: the thing is a directory)

언급URL : https://stackoverflow.com/questions/24696044/nsfilemanager-fileexistsatpathisdirectory-and-swift

반응형