2010-08-04 5 views
9

Dans mon application, je laisse l'utilisateur enregistrer un clip sonore et plus tard, si l'utilisateur le souhaite, je souhaite qu'il puisse le supprimer.iPhone/Objectif C: Impossible de supprimer un fichier

Voici le code que j'utilise:

NSFileManager *fileManager = [NSFileManager defaultManager]; 
NSError *error; 
NSLog(@"File exists: %d", [fileManager fileExistsAtPath:path]); 
NSLog(@"Is deletable file at path: %d", [fileManager isDeletableFileAtPath:path]); 
[fileManager removeItemAtPath:path error:&error]; 
if (error != nil) 
{ 
    NSLog(@"Error: %@", error); 
    NSLog(@"Path to file: %@", path); 
} 

Le problème est que fileExistsAtPath et isDeletableFileAtPath retour nul et le removeItemAtPath ne fonctionne pas, et jette cette erreur,

Error: Error Domain=NSCocoaErrorDomain Code=4 UserInfo=0x391b7f0 "Operation could not be completed. (Cocoa error 4.)"

Le chemin a ce formulaire:

/Users/andrei/Library/Application%20Support/iPhone%20Simulator/User/Applications/5472B318-FA57-4F8D-AD91-7E06E9609215/Documents/1280913694.caf 

Il existe un fichier appelé 1280913694.caf, mais il ne le récupère pas. Cela a-t-il quelque chose à voir avec la façon dont le chemin devrait être représenté?

Le chemin fonctionne lors de la lecture du fichier audio avec AVAudioPlayer.

J'ai aussi changé le %@ à %d pour fileExistsAtPath et isDeletableFileAtPath et la réponse est 0, que je suppose que signifie FAUX.

Le nom du fichier est stocké dans une base de données, et le chemin vers le fichier est récupéré avec cette méthode:

-(NSString *)returnFullPathToDirectory 
{ 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    return documentsDirectory; 
} 

Après je reçois cette valeur, je l'utilise dans le code suivant

NSString *filePath = [documentsDirectory stringByAppendingPathComponent:fileName]; 
+1

Veuillez remplacer les deux '% @' avant '-removeItemAtPath' par'% d' et réexécutez. – kennytm

+0

notez que le préfixe file: // doit être supprimé, c'est-à-dire convertir en NSURL et obtenir l'attribut .path (comme en effet le chemin est au dessus) – ThomasRS

Répondre

26

Votre chèque est incorrect. Vous devez définir BOOL sur la valeur de retour de la méthode et l'utiliser pour gérer les conditions d'erreur car il est possible que la méthode se termine correctement et que l'erreur soit non nulle par la suite. Ainsi, le fichier a peut-être été supprimé mais vous recevez une erreur incorrecte.

Vous ne devriez pas essayer de supprimer le fichier s'il n'existe pas.

Aussi, je généralement Consigner la localizedDescription de l'erreur qui est plus facile à lire

Ce code fonctionne dans mon projet (chemin a été défini par ailleurs):

NSFileManager *fileManager = [NSFileManager defaultManager]; 
    NSError *error; 
    BOOL fileExists = [fileManager fileExistsAtPath:path]; 
    NSLog(@"Path to file: %@", path);   
    NSLog(@"File exists: %d", fileExists); 
    NSLog(@"Is deletable file at path: %d", [fileManager isDeletableFileAtPath:path]); 
    if (fileExists) 
    { 
     BOOL success = [fileManager removeItemAtPath:path error:&error]; 
     if (!success) NSLog(@"Error: %@", [error localizedDescription]); 
    } 

réponse concernant: NSError: Does using nil to detect Error actually turn off error reporting?

0

Le chemin du fichier codé par l'URL me semble suspect. J'ai lu quelque part que les chemins de fichiers iPhone devraient être représentés comme des URL de nos jours, mais je ne pense pas que les espaces doivent être encodés en url.

Essayez de supprimer les% 20 de votre chemin et d'essayer à nouveau?

+1

Je laisse le chemin du fichier être: **/Users/andrei/Library/Support d'application/Simulateur iPhone/Utilisateur/Applications/0547AE74-AD10-4BEF-98CF-8FFF5BB2F70F/Documents/1280913694.caf ** donc, non% 20, et maintenant ... ce qui est bizarre, ça me dit que le fichier n'existe pas (renvoie 0 à fileExistsAtPath), mais aussi que le fichier est effacé (renvoie 1 à isDeletableFileAtPath). L'erreur persiste et ne supprime pas le fichier. – Andrei

+0

Pourriez-vous s'il vous plaît poster le code que vous utilisez pour récupérer le chemin? – Jasarien

+0

posté dans la question d'origine en tant que deuxième édition (** edit2 **) – Andrei

-8

essayer de changer

NSFileManager *fileManager = [NSFileManager defaultManager]; 

à: (! Error = zéro)

NSFileManager *fileManager = [NSFileManager new]; 
+4

euh, non. Il avait raison de commencer. –

+0

Est-ce même objectif-c? – Jason

Questions connexes