Apple tuyên bố về NSSearchPathForDirectoriesInDomains(_:_:_:)
:
Bạn nên cân nhắc sử dụng các FileManager
phương thức urls(for:in:)
và url(for:in:appropriateFor:create:)
trả về URL nào là định dạng ưa thích.
Với Swift 5, FileManager
có một phương thức gọi là contentsOfDirectory(at:includingPropertiesForKeys:options:)
. contentsOfDirectory(at:includingPropertiesForKeys:options:)
có tuyên bố sau:
Thực hiện tìm kiếm nông của thư mục được chỉ định và trả về URL cho các mục được chứa.
func contentsOfDirectory(at url: URL, includingPropertiesForKeys keys: [URLResourceKey]?, options mask: FileManager.DirectoryEnumerationOptions = []) throws -> [URL]
Do đó, để truy xuất các url của các tệp có trong thư mục tài liệu, bạn có thể sử dụng đoạn mã sau sử dụng FileManager
các phương thức urls(for:in:)
và contentsOfDirectory(at:includingPropertiesForKeys:options:)
phương thức:
guard let documentsDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first else { return }
do {
let directoryContents = try FileManager.default.contentsOfDirectory(at: documentsDirectory, includingPropertiesForKeys: nil, options: [])
// Print the urls of the files contained in the documents directory
print(directoryContents)
} catch {
print("Could not search for urls of files in documents directory: \(error)")
}
Ví dụ, cách UIViewController
triển khai bên dưới cho thấy cách lưu tệp từ gói ứng dụng vào thư mục tài liệu và cách lấy url của các tệp được lưu trong thư mục tài liệu:
import UIKit
class ViewController: UIViewController {
@IBAction func copyFile(_ sender: UIButton) {
// Get file url
guard let fileUrl = Bundle.main.url(forResource: "Movie", withExtension: "mov") else { return }
// Create a destination url in document directory for file
guard let documentsDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first else { return }
let documentDirectoryFileUrl = documentsDirectory.appendingPathComponent("Movie.mov")
// Copy file to document directory
if !FileManager.default.fileExists(atPath: documentDirectoryFileUrl.path) {
do {
try FileManager.default.copyItem(at: fileUrl, to: documentDirectoryFileUrl)
print("Copy item succeeded")
} catch {
print("Could not copy file: \(error)")
}
}
}
@IBAction func displayUrls(_ sender: UIButton) {
guard let documentsDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first else { return }
do {
let directoryContents = try FileManager.default.contentsOfDirectory(at: documentsDirectory, includingPropertiesForKeys: nil, options: [])
// Print the urls of the files contained in the documents directory
print(directoryContents) // may print [] or [file:///private/var/mobile/Containers/Data/Application/.../Documents/Movie.mov]
} catch {
print("Could not search for urls of files in documents directory: \(error)")
}
}
}