2011-01-07 12 views
3

Ich versuche eine Datei zu löschen, aber irgendwie lässt nsfilemanager das nicht zu. Ich benutze die Datei in einer Zeile Code, aber sobald diese Aktion ausgeführt wurde, möchte ich die Datei gelöscht werden. Ich habe den Fehlercode und Meldung protokolliert und ich bekomme Fehlercode: 4 und die Meldung:Cocoa - NSFileManager removeItemAtPath funktioniert nicht

"text.txt" could not be removed 

Gibt es eine Möglichkeit, diesen Fehler zu beheben „sauber“ (ohne Hacks), so dass Apple akzeptieren Sie diese App auf ihr Mac App Store?

EDIT:

Dies ist, was ich verwende:

[[NSFileManager defaultManager] removeItemAtPath:filePath error:NULL]; 

Danke,

kevin

+0

Hallo Kevin, kannst du mehr Code posten, damit wir sehen können, was vor sich geht? Ist dies die gleiche Anwendung, für die Sie 'BLAuthentication' benötigt haben? –

+0

Wow, komisch, dass wir uns in der gleichen Frage wieder getroffen haben, oder? Nein, es ist anders, und in diesem Fall übergebe ich es an den App Store. In diesem Fall erlauben sie nicht das Zulassen von "root access". Ich habe Änderungen an der Frage vorgenommen, um zu beschreiben, was ich verwende. – lab12

+0

Versuchen Sie es mit 'unlink ([filePath fileSystemRepresentation]);', das ist der POSIX-Weg, um eine Datei zu entfernen. – dreamlax

Antwort

11

Fehlercode 4 scheint NSNoSuchFileError zu sein. Wenn die zu löschende Datei wirklich existiert, dann ist der Pfad falsch. Sie müssen etwas Code posten, wenn Sie möchten, dass wir Ihnen genau sagen, wie Sie den Pfad falsch bekommen haben.

Wenn die Datei nicht existiert, können Sie den Fehler ignorieren.

+0

Hallo ich konfrontiert dieses Problem, stellt sich heraus, dass mein Dateiname falsch ist. Entweder ist der Dateiname falsch oder der Dateipfad ist falsch, es wird der Fehlercode 4 angezeigt. Cheers. – GeneCode

+0

@ Rocotilos: "Dateipfad" enthält normalerweise den tatsächlichen Namen der Datei. – JeremyP

+0

Wie geht es Ihnen generell, den tatsächlichen Fehler in der Dokumentation/Quelle zu finden? – fabian789

2

Zuerst Sie den Pfad für das Dokumentenverzeichnis auswählen müssen, dann können Sie löschen die Datei. Nur remove-Anweisung ist nicht ausreichend.

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
     NSString *documentsDirectoryPath = [paths objectAtIndex:0]; 

    NSString *databaseFile = [documentsDirectoryPath stringByAppendingPathComponent:@"text.txt"]; 

    NSFileManager *fileManager = [NSFileManager defaultManager]; 
    [fileManager removeItemAtPath:databaseFile error:NULL]; 

Verwenden Sie dies zur Lösung Ihres Problems.

2

Ihr Weg ist falsch

Verwenden Sie den folgenden

NSString *str = [outputFieldURL path]; 

statt

NSString *str = [outputFieldURL absoluteString]; 

Die Methode "removeItemAtPath:" benötigen Sie den lokalen Pfad der Datei, wenn Sie entfernen möchten, verwenden URL, sollten Sie verwenden -removeItemAtURL:

+0

Für diejenigen, die nach Antworten zu Code: 4-Fehlern suchen, wenn Sie mit einer der "Path" -Familien von Funktionen arbeiten, ist dies das erste zu überprüfende Element. Wenn Sie NSURL absoluteString verwenden, wird "file: ///" vorangestellt, und das verursacht diesen Fehler. –

3

Ich hatte eine ähnliche Problem in swift. Aus irgendeinem Grund funktionierte fileManager.removeItemAtPath nicht und ich änderte fileManager.removeItemAtPath (filePath) in fileManager.removeItemAtURL (fileURL) und es funktioniert gut.

+0

Scheint wie ein Fehler mit fileManager.removeItemAtPath – etayluz

0

Ich finde es gerade aus etwas sehr wichtig, wenn Sie NSFileManager verwenden. Sie müssen auf App Sandboxing achten.

Diese Zeile gibt das Pfaddokumentverzeichnis Ihrer Sandbox-Anwendung zurück. Wenn Sie eine Datei mit FileManager in Ihrem Dokumentverzeichnis erstellen (z. B.), speichern Sie nicht den vollständigen Dateipfad, sondern nur den Pfad aus dem aktuellen Dokumentverzeichnis.

Sie können den vollständigen Pfad Ihrer erstellten Datei wiederherstellen.

Hoffen (nach 5 Jahren) Hilfe über Entwickler ;-)

Verwandte Themen