Swift の[enumerator(at:includingPropertiesForKeys:options:)]
1を使用して、特定のベース パス内のすべてのファイルを検索し、さまざまなリソース キー (ファイル名、パス、作成日など) の配列を作成しています。これはうまくいきましたが、作成された配列の要素が作成日順に並べられていないことに気付きました。これは、これらの配列の要素をループに渡して各ファイルを日付順でアップロードする前に必要なことです。
したがって、結果として得られるすべての配列の要素を作成日でソートする必要があります。これは、独自の配列内で (.creationDateKey リソース キーを使用して) 抽出できるプロパティです。したがって、私には2つのオプションがあります(私は思う):
- 作成日までに要素を元の配列に最初に追加するように強制する
- ファイル作成日を含む配列を使用して、作成された各配列の要素をソートします
これを行う最善の方法は何ですか?私はそれが簡単だと思っていましたが、そうではありませんでした。
すべてのアドバイスは丁寧に受け取りました。ありがとう。
これが私のコードです:
// get URL(s) and other attributes of file(s) to be uploaded
let localFileManager = FileManager()
let resourceKeys = Set<URLResourceKey>([.nameKey, .pathKey, .creationDateKey, .isDirectoryKey])
let directoryEnumerator = localFileManager.enumerator(at: baseURL, includingPropertiesForKeys: Array(resourceKeys), options: .skipsHiddenFiles)!
var fileURLs: [URL] = []
var fileNames: [String] = []
var filePaths: [String] = []
var fileDates: [Date] = []
for case let fileURL as URL in directoryEnumerator {
guard let resourceValues = try? fileURL.resourceValues(forKeys: resourceKeys),
let isDirectory = resourceValues.isDirectory,
let name = resourceValues.name,
let path = resourceValues.path,
let date = resourceValues.creationDate,
else {
continue
}
if isDirectory {
if name == "_extras" { // use this to exclude a given directory
directoryEnumerator.skipDescendants()
}
} else {
// append elements in date order here?
fileURLs.append(fileURL) // full URLs of files
fileNames.append(name) // file names only
filePaths.append(path) // paths of file
fileDates.append(date) // date and time that file was created
// sort arrays by creation date here?
}
}
print(fileURLs)
print(fileNames)
print(filePaths)
print(fileDates)