2016-04-01 5 views
3

Ich lade eine Datei in einen Ordner herunter und ich bestätige, dass die Datei tatsächlich im Code vorhanden ist, aber ich erhalte das oben genannte Error. Kann mir jemand helfen herauszufinden, warum ich keine Berechtigung zum Lesen dieser Datei habe?Die Datei "" konnte nicht geöffnet werden, da Sie keine Berechtigung zum Anzeigen haben.

let documentsURL = NSSearchPathForDirectoriesInDomains 
      (.DocumentDirectory, .UserDomainMask, true)[0] 

    let checkValidation = NSFileManager.defaultManager() 

    if (checkValidation.fileExistsAtPath(documentsURL)) 
    { 
     print("FILE AVAILABLE"); 
    } 
    else 
    { 
     print("FILE NOT AVAILABLE"); 
    } 

    print(documentsURL) 

    do{ 
     let data = try String(contentsOfFile: documentsURL as String, 
      encoding: NSASCIIStringEncoding) 
     print(data) 

    } 
    catch let error { print(error) } 

Fehler Domain = NSCocoaErrorDomain-Code = 257 "Die Datei‚Documents‘konnte nicht geöffnet werden, weil Sie nicht die Erlaubnis, es zu betrachten haben." Userinfo = {NSFilePath =/var/mobile/Container/Daten/Anwendung/7FA4D6A9-2149-4053-BF08-22E94A00AE34/Dokumente, NSUnderlyingError = 0x137807200 {Fehler Domain = NSPOSIXErrorDomain-Code = 13 "Zugriff verweigert"}}

+0

Ich würde in Erwägung ziehen, zuerst die URL zu drucken, die Sie in eine Zeichenfolge umgewandelt haben. Es ist wahrscheinlich keine gute Idee, NSURL und String auf diese Weise zu verwenden. Ziehen Sie stattdessen die Verwendung von NSURL.relativePath in Betracht. –

+0

@AntwanvanHoudt Entschuldigung, ich verstehe nicht, was Sie tun sollen? Wie benutze ich NSURL.relativePath? Außerdem lief dieses Stück Code für mich vorher als String, also bezweifle ich, dass es sich um das Problem – user3395936

+0

"documentsDirectoryURL.relativePath!" statt der Besetzung. –

Antwort

3

Ihre documentsURL ist die Adresse des Dokumentenordners in Ihrer App. Es ist nicht eine Datei, die Sie den Inhalt bekommen:

/var/mobile/Container/Daten/Anwendung/7FA4D6A9-2149-4053-BF08-22E94A00AE34/Dokumente

+1

Also warum ist das, wenn ich diesen Code ausführen 'if (checkValidation.fileExistsAtPath (documentsURL)) 'es heißt, dass das Dokument existiert in diesem Pfad? – user3395936

+0

@ user3395936 Weil diese API viel zu oft 'true' zurückgibt. Was Sie tun möchten, ist 'documentsURL.hasDirectoryPath', das Ihnen sagen wird, ob das ein Verzeichnis ist. Wenn Sie die untergeordneten Dateien innerhalb des Verzeichnisses abrufen möchten, verwenden Sie 'FileManager.default.contentsOfDirectory (at: documentsURL, einschließlich PropertiesForKeys: nil, options: []))' –

0

Ich hatte dasselbe Problem. Sie müssen mindestens eine Datei in Ihrem Dokumentenordner haben, und Sie müssen diese Datei drucken.

Ich schrieb

var filename = self.getDocumentsDirectory().appendingPathComponent(local[i]) 

Sie müssen eine Datei am Ende der URL haben, weil Apple nicht Menschen mit Dokumentenfaltblätter verwirren will und sie nicht in der Lage, wieder würde ich mir vorstellen,

Verwandte Themen