获取文档目录收件箱文件并移动
Get Document Directory Inbox file and move
我的应用程序中有一个传入的 PDF
附件。它作为 NSURL
在 AppDelegate
:
中分配进来
func application(app: UIApplication, openURL url: NSURL, options: [String : AnyObject]) -> Bool {
文件在 print
日志中打印为:
Incoming File:
file:///private/var/mobile/Containers/Data/Application/65E4F19F-98DD-4A4E-8A49-E1C564D135D8/Documents/Inbox/Burrito.pdf
如何从 DocumentDirectory
Inbox
文件夹中取出文件,该文件夹默认用于传入文件?我尝试创建一个名为 "Recipes" 的新文件夹,然后将其移动到此文件夹,但不会出现错误:
Unable to create directory Error Domain=NSCocoaErrorDomain Code=516
"“Burrito-2.pdf” couldn’t be moved to “Documents” because an item with
the same name already exists."
UserInfo={NSSourceFilePathErrorKey=/private/var/mobile/Containers/Data/Application/D5C9B472-B880-4D68-BA0D-31BA545E2150/Documents/Inbox/Burrito.pdf,
NSUserStringVariant=(
Move ), NSDestinationFilePath=/var/mobile/Containers/Data/Application/D5C9B472-B880-4D68-BA0D-31BA545E2150/Documents/Recipes,
NSFilePath=/private/var/mobile/Containers/Data/Application/D5C9B472-B880-4D68-BA0D-31BA545E2150/Documents/Inbox/Burrito.pdf,
NSUnderlyingError=0x13912e0e0 {Error Domain=NSPOSIXErrorDomain Code=17
"File exists"}}
我移动文件的代码是:
// Incoming file
print("Incoming File: \(incomingFileTransfer)")
// File Manager
let filemgr = NSFileManager.defaultManager()
// Document Directory
var dirPaths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
// Documents Location
let docsDir = dirPaths[0] //as! String
print("Documents Folder: \(docsDir)")
print("------------------------")
// Create a new folder in the directory named "Recipes"
print("Creating new folder...")
let documentsPath = NSURL(fileURLWithPath: NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0])
let newPath = documentsPath.URLByAppendingPathComponent("Recipes")
do {
try NSFileManager.defaultManager().createDirectoryAtPath(newPath.path!, withIntermediateDirectories: true, attributes: nil)
} catch let error as NSError {
NSLog("Unable to create directory \(error.debugDescription)")
}
print("New Path: \(newPath)")
print("------------------------")
// Moving item in folder
print("Moving PDf file to new folder...")
let startingPath = incomingFileTransfer
let endingPath = newPath
do {
try filemgr.moveItemAtURL(startingPath, toURL: endingPath)
} catch let error as NSError {
NSLog("Unable to create directory \(error.debugDescription)")
}
我是 Swift 的新手,一直在在线研究文件管理和文档,但无法弄清楚。我看了 here 但它是不同的,也在 Objective-C
中;转换为 Swift
对我来说很难。我正在使用 Xcode7
和 Swift2
,谢谢。
当您第二次 运行 应用程序并且目录已经创建并且文件已被移动时,您会收到错误消息。
苹果强烈推荐使用NSFileManager
的URL相关API
首先获取文档目录
// File Manager
let filemgr = NSFileManager.defaultManager()
// Document Directory
let docsDirURL = try! filemgr.URLForDirectory(.DocumentDirectory, inDomain: .UserDomainMask, appropriateForURL: nil, create: true)
try!
语句是安全的,因为文档目录始终存在。
然后检查Recipes
目录是否存在。如果没有,创建它
let recipesURL = docsDirURL.URLByAppendingPathComponent("Recipes")
if !filemgr.fileExistsAtPath(recipesURL.path!) {
do {
try filemgr.createDirectoryAtURL(recipesURL, withIntermediateDirectories: false, attributes: nil)
print("Directory created at: \(recipesURL)")
} catch let error as NSError {
NSLog("Unable to create directory \(error.debugDescription)")
return
}
}
您还可以检查目标文件是否存在
let incomingFileName = incomingFileTransfer.lastPathComponent!
let startingURL = incomingFileTransfer
let endingURL = recipesURL.URLByAppendingPathComponent(incomingFileName)
if !filemgr.fileExistsAtPath(endingURL.path!) {
do {
try filemgr.moveItemAtURL(startingURL, toURL: endingURL)
} catch let error as NSError {
NSLog("Unable to move file \(error.debugDescription)")
}
}
我的应用程序中有一个传入的 PDF
附件。它作为 NSURL
在 AppDelegate
:
func application(app: UIApplication, openURL url: NSURL, options: [String : AnyObject]) -> Bool {
文件在 print
日志中打印为:
Incoming File: file:///private/var/mobile/Containers/Data/Application/65E4F19F-98DD-4A4E-8A49-E1C564D135D8/Documents/Inbox/Burrito.pdf
如何从 DocumentDirectory
Inbox
文件夹中取出文件,该文件夹默认用于传入文件?我尝试创建一个名为 "Recipes" 的新文件夹,然后将其移动到此文件夹,但不会出现错误:
Unable to create directory Error Domain=NSCocoaErrorDomain Code=516 "“Burrito-2.pdf” couldn’t be moved to “Documents” because an item with the same name already exists." UserInfo={NSSourceFilePathErrorKey=/private/var/mobile/Containers/Data/Application/D5C9B472-B880-4D68-BA0D-31BA545E2150/Documents/Inbox/Burrito.pdf, NSUserStringVariant=( Move ), NSDestinationFilePath=/var/mobile/Containers/Data/Application/D5C9B472-B880-4D68-BA0D-31BA545E2150/Documents/Recipes, NSFilePath=/private/var/mobile/Containers/Data/Application/D5C9B472-B880-4D68-BA0D-31BA545E2150/Documents/Inbox/Burrito.pdf, NSUnderlyingError=0x13912e0e0 {Error Domain=NSPOSIXErrorDomain Code=17 "File exists"}}
我移动文件的代码是:
// Incoming file
print("Incoming File: \(incomingFileTransfer)")
// File Manager
let filemgr = NSFileManager.defaultManager()
// Document Directory
var dirPaths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
// Documents Location
let docsDir = dirPaths[0] //as! String
print("Documents Folder: \(docsDir)")
print("------------------------")
// Create a new folder in the directory named "Recipes"
print("Creating new folder...")
let documentsPath = NSURL(fileURLWithPath: NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0])
let newPath = documentsPath.URLByAppendingPathComponent("Recipes")
do {
try NSFileManager.defaultManager().createDirectoryAtPath(newPath.path!, withIntermediateDirectories: true, attributes: nil)
} catch let error as NSError {
NSLog("Unable to create directory \(error.debugDescription)")
}
print("New Path: \(newPath)")
print("------------------------")
// Moving item in folder
print("Moving PDf file to new folder...")
let startingPath = incomingFileTransfer
let endingPath = newPath
do {
try filemgr.moveItemAtURL(startingPath, toURL: endingPath)
} catch let error as NSError {
NSLog("Unable to create directory \(error.debugDescription)")
}
我是 Swift 的新手,一直在在线研究文件管理和文档,但无法弄清楚。我看了 here 但它是不同的,也在 Objective-C
中;转换为 Swift
对我来说很难。我正在使用 Xcode7
和 Swift2
,谢谢。
当您第二次 运行 应用程序并且目录已经创建并且文件已被移动时,您会收到错误消息。
苹果强烈推荐使用NSFileManager
首先获取文档目录
// File Manager
let filemgr = NSFileManager.defaultManager()
// Document Directory
let docsDirURL = try! filemgr.URLForDirectory(.DocumentDirectory, inDomain: .UserDomainMask, appropriateForURL: nil, create: true)
try!
语句是安全的,因为文档目录始终存在。
然后检查Recipes
目录是否存在。如果没有,创建它
let recipesURL = docsDirURL.URLByAppendingPathComponent("Recipes")
if !filemgr.fileExistsAtPath(recipesURL.path!) {
do {
try filemgr.createDirectoryAtURL(recipesURL, withIntermediateDirectories: false, attributes: nil)
print("Directory created at: \(recipesURL)")
} catch let error as NSError {
NSLog("Unable to create directory \(error.debugDescription)")
return
}
}
您还可以检查目标文件是否存在
let incomingFileName = incomingFileTransfer.lastPathComponent!
let startingURL = incomingFileTransfer
let endingURL = recipesURL.URLByAppendingPathComponent(incomingFileName)
if !filemgr.fileExistsAtPath(endingURL.path!) {
do {
try filemgr.moveItemAtURL(startingURL, toURL: endingURL)
} catch let error as NSError {
NSLog("Unable to move file \(error.debugDescription)")
}
}