如何检查文件目录中Swift
是否存在文件?
我正在使用[ .writeFilePath ]
方法将图像保存到Documents目录中,我想在每次启动应用程序时加载它.但是如果没有保存的图像,我有一个默认图像.
但我无法理解如何使用该[ func fileExistsAtPath(_:) ]
功能.有人可以给出一个使用函数的示例,并将路径参数传递给它.
我相信我不需要在那里粘贴任何代码,因为这是一个通用的问题.任何帮助都感激不尽.
干杯
mik*_*hik 221
Swift 4.x版本
let path = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] as String
let url = NSURL(fileURLWithPath: path)
if let pathComponent = url.appendingPathComponent("nameOfFileHere") {
let filePath = pathComponent.path
let fileManager = FileManager.default
if fileManager.fileExists(atPath: filePath) {
print("FILE AVAILABLE")
} else {
print("FILE NOT AVAILABLE")
}
} else {
print("FILE PATH NOT AVAILABLE")
}
Run Code Online (Sandbox Code Playgroud)
Swift 3.x版本
let path = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] as String
let url = URL(fileURLWithPath: path)
let filePath = url.appendingPathComponent("nameOfFileHere").path
let fileManager = FileManager.default
if fileManager.fileExists(atPath: filePath) {
print("FILE AVAILABLE")
} else {
print("FILE NOT AVAILABLE")
}
Run Code Online (Sandbox Code Playgroud)
Swift 2.x版本,需要使用URLByAppendingPathComponent
let path = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as String
let url = NSURL(fileURLWithPath: path)
let filePath = url.URLByAppendingPathComponent("nameOfFileHere").path!
let fileManager = NSFileManager.defaultManager()
if fileManager.fileExistsAtPath(filePath) {
print("FILE AVAILABLE")
} else {
print("FILE NOT AVAILABLE")
}
Run Code Online (Sandbox Code Playgroud)
PRE*_*MAR 33
检查以下代码:
Swift 1.2
let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as String
let getImagePath = paths.stringByAppendingPathComponent("SavedFile.jpg")
let checkValidation = NSFileManager.defaultManager()
if (checkValidation.fileExistsAtPath(getImagePath))
{
println("FILE AVAILABLE");
}
else
{
println("FILE NOT AVAILABLE");
}
Run Code Online (Sandbox Code Playgroud)
Swift 2.0
let paths = NSURL(fileURLWithPath: NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0])
let getImagePath = paths.URLByAppendingPathComponent("SavedFile.jpg")
let checkValidation = NSFileManager.defaultManager()
if (checkValidation.fileExistsAtPath("\(getImagePath)"))
{
print("FILE AVAILABLE");
}
else
{
print("FILE NOT AVAILABLE");
}
Run Code Online (Sandbox Code Playgroud)
vad*_*ian 27
如今(2016)苹果建议越来越多使用的URL相关的API NSURL
,NSFileManager
等等.
要在iOS和文档目录斯威夫特2使用
let documentDirectoryURL = try! NSFileManager.defaultManager().URLForDirectory(.DocumentDirectory,
inDomain: .UserDomainMask,
appropriateForURL: nil,
create: true)
Run Code Online (Sandbox Code Playgroud)
在try!
因为这个标准目录是保证生存在这种情况下是安全的.
然后附加适当的路径组件,例如sqlite
文件
let databaseURL = documentDirectoryURL.URLByAppendingPathComponent("MyDataBase.sqlite")
Run Code Online (Sandbox Code Playgroud)
现在,检查文件是否存在用checkResourceIsReachableAndReturnError
的NSURL
.
let fileExists = databaseURL.checkResourceIsReachableAndReturnError(nil)
Run Code Online (Sandbox Code Playgroud)
如果需要错误,请将NSError
指针传递给参数.
var error : NSError?
let fileExists = databaseURL.checkResourceIsReachableAndReturnError(&error)
if !fileExists { print(error) }
Run Code Online (Sandbox Code Playgroud)
斯威夫特3:
在Swift 3中checkResourceIsReachable
被标记为可以抛出
let documentDirectoryURL = try! FileManager.default.url(for: .documentDirectory,
in: .userDomainMask,
appropriateFor: nil,
create: true)
let databaseURL = documentDirectoryURL.appendingPathComponent("MyDataBase.sqlite")
Run Code Online (Sandbox Code Playgroud)
要仅考虑布尔返回值并忽略错误,请使用nil-coalescing运算符
do {
let fileExists = try databaseURL.checkResourceIsReachable()
// handle the boolean result
} catch let error as NSError {
print(error)
}
Run Code Online (Sandbox Code Playgroud)
Mic*_*lum 15
它非常友好.只需使用NSFileManager的defaultManager单例,然后使用该fileExistsAtPath()
方法,它只需要一个字符串作为参数,并返回一个Bool,允许它直接放在if语句中.
let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
let documentDirectory = paths[0] as! String
let myFilePath = documentDirectory.stringByAppendingPathComponent("nameOfMyFile")
let manager = NSFileManager.defaultManager()
if (manager.fileExistsAtPath(myFilePath)) {
// it's here!!
}
Run Code Online (Sandbox Code Playgroud)
请注意,在Swift 2中不需要向下转换为String.
Lak*_*ngh 12
斯威夫特 4.2
extension URL {
func checkFileExist() -> Bool {
let path = self.path
if (FileManager.default.fileExists(atPath: path)) {
print("FILE AVAILABLE")
return true
}else {
print("FILE NOT AVAILABLE")
return false;
}
}
}
Run Code Online (Sandbox Code Playgroud)
使用: -
if fileUrl.checkFileExist()
{
// Do Something
}
Run Code Online (Sandbox Code Playgroud)
extension FileManager {
class func fileExists(filePath: String) -> Bool {
var isDirectory = ObjCBool(false)
return self.default.fileExists(atPath: filePath, isDirectory: &isDirectory)
}
}
Run Code Online (Sandbox Code Playgroud)
在Swift 5 工作
do {
let documentDirectory = try FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: true)
let fileUrl = documentDirectory.appendingPathComponent("userInfo").appendingPathExtension("sqlite3")
if FileManager.default.fileExists(atPath: fileUrl.path) {
print("FILE AVAILABLE")
} else {
print("FILE NOT AVAILABLE")
}
} catch {
print(error)
}
Run Code Online (Sandbox Code Playgroud)
其中"userInfo"
- 文件名,以及"sqlite3"
- 文件的扩展名
Swift 3中的替代/推荐的代码模式是:
使用异常处理
func verifyIfSqliteDBExists(){
let docsDir : URL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
let dbPath : URL = docsDir.appendingPathComponent("database.sqlite")
do{
let sqliteExists : Bool = try dbPath.checkResourceIsReachable()
print("An sqlite database exists at this path :: \(dbPath.path)")
}catch{
print("SQLite NOT Found at :: \(strDBPath)")
}
}
Run Code Online (Sandbox Code Playgroud)非常简单:如果你的路径是一个 URL 实例,则通过 'path' 方法转换为字符串。
let fileManager = FileManager.default
var isDir: ObjCBool = false
if fileManager.fileExists(atPath: yourURLPath.path, isDirectory: &isDir) {
if isDir.boolValue {
//it's a Directory path
}else{
//it's a File path
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
95027 次 |
最近记录: |