Próbuję dostać filaattriributedey za pomocą menedżera plików w IOS za pomocą Swift. Kiedy spróbuję tego, otrzymuję następujący błąd "

Error Domain=NSCocoaErrorDomain Code=260 "The file “Personal%20Narrative%20Essay.txt” couldn’t be opened because there is no such file." UserInfo={NSFilePath=file:///private/var/mobile/Library/Mobile%20Documents/com~apple~TextEdit/Documents/Personal%20Narrative%20Essay.txt, NSUnderlyingError=0x283e720a0 {Error Domain=NSPOSIXErrorDomain Code=2 "No such file or directory"}}

Mówi, że plik nie istnieje, ale wiem, że istnieje, ponieważ pojawia się w Uidocumentpicker i jestem w stanie uzyskać zawartość pliku za pomocą try! Data(contentsOf: URL).

Mój kod do uzyskania atrybutów pliku jest:

func processURL(url: URL) -> Bool {
        let newPath = url.absoluteString
        print(newPath)
        do {
            let attributes = try FileManager.default.attributesOfItem(atPath: newPath)
            let fileSize = attributes[FileAttributeKey.size]
            print("Calculated File Size: \(fileSize!)")
            return true
        }
        catch {
            print(error)
            self.isShowingSpinner = false
            self.isShowingURLErrorAlert = true
            return false
        }
        return true
    }

Po prostu muszę być w stanie uzyskać rozmiar pliku, który wykonuję przy użyciu powyższej funkcji. Nie rozumiem, czy robię coś złego. Z góry dziękuję za pomoc.

0
Todd 30 lipiec 2020, 02:07

1 odpowiedź

Najlepsza odpowiedź

Mógłbym rozmnażać problem z prostym placem zabaw, w którym umieściłem zasób o nazwie "Hello.text".

Oto wyniki:

let filePath = Bundle.main.path(forResource: "hello", ofType: "txt")!
// Prints as /var/folders/blah-blah-blah/hello.txt
let fileURL = Bundle.main.url(forResource: "hello", withExtension: "txt")!
// Prints as file:///var/folders/blah-blah-blah/hello.txt

Problem polega na tym, że prefiks file:// jest specyficzny dla pliku URL i nie oczekuje się, że na ścieżki argumenty typu String.

try FileManager.default.attributesOfItem(atPath: fileURL.absoluteString) // ❌
try FileManager.default.attributesOfItem(atPath: fileURL.path) // ✅
2
Dirty Henry 30 lipiec 2020, 05:01