Skip to content

Commit bec3093

Browse files
committed
Use FoundationEssentials file attributes for replacement directories
1 parent e315e9b commit bec3093

1 file changed

Lines changed: 11 additions & 3 deletions

File tree

Sources/FoundationEssentials/FileManager/FileManager+Directories.swift

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -71,9 +71,9 @@ extension _FileManagerImpl {
7171
let temporaryItemsDirectory = temporaryDirectory.appending(component: "TemporaryItems", directoryHint: .isDirectory)
7272
let referenceDirectory = reference.deletingPathExtension()
7373
let useTemporaryDirectory: Bool
74-
if let temporaryVolumeIdentifier = try? temporaryDirectory.resourceValues(forKeys: [.volumeIdentifierKey]).volumeIdentifier,
75-
let referenceVolumeIdentifier = try? reference.resourceValues(forKeys: [.volumeIdentifierKey]).volumeIdentifier {
76-
useTemporaryDirectory = temporaryVolumeIdentifier.isEqual(referenceVolumeIdentifier)
74+
if let temporaryVolumeIdentifier = systemNumber(for: temporaryDirectory),
75+
let referenceVolumeIdentifier = systemNumber(for: reference) {
76+
useTemporaryDirectory = temporaryVolumeIdentifier == referenceVolumeIdentifier
7777
} else {
7878
useTemporaryDirectory = !fileManager.isWritableFile(atPath: referenceDirectory.path)
7979
}
@@ -91,6 +91,14 @@ extension _FileManagerImpl {
9191
attempt += 1
9292
}
9393
}
94+
95+
func systemNumber(for url: URL) -> UInt? {
96+
guard let attributes = try? fileManager.attributesOfItem(atPath: url.path),
97+
let value = attributes[.systemNumber] else {
98+
return nil
99+
}
100+
return _readFileAttributePrimitive(value, as: UInt.self)
101+
}
94102
}
95103

96104
private func itemReplacementDirectoryName(forAttempt attempt: Int) -> String {

0 commit comments

Comments
 (0)