Apple은 다음에 대해 설명합니다 NSSearchPathForDirectoriesInDomains(_:_:_:)
.
선호하는 형식 인 FileManager
메소드 urls(for:in:)
와 url(for:in:appropriateFor:create:)
반환 URL 사용을 고려해야 합니다.
Swift 5 FileManager
에는 contentsOfDirectory(at:includingPropertiesForKeys:options:)
. contentsOfDirectory(at:includingPropertiesForKeys:options:)
다음과 같은 선언이 있습니다.
지정된 디렉토리의 단순 검색을 수행하고 포함 된 항목에 대한 URL을 리턴합니다.
func contentsOfDirectory(at url: URL, includingPropertiesForKeys keys: [URLResourceKey]?, options mask: FileManager.DirectoryEnumerationOptions = []) throws -> [URL]
따라서 문서 디렉토리에 포함 된 파일의 URL을 검색하려면 FileManager
의 urls(for:in:)
및 contentsOfDirectory(at:includingPropertiesForKeys:options:)
메소드를 사용하는 다음 코드 스 니펫을 사용할 수 있습니다 .
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)")
}
예를 들어 UIViewController
아래 구현은 App Bundle의 파일을 문서 디렉토리에 저장하는 방법과 문서 디렉토리에 저장된 파일의 URL을 가져 오는 방법을 보여줍니다.
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)")
}
}
}