2012-10-12 2 views
2

Vous avez un problème pour savoir comment déterminer le fichier/dossier dans la corbeille. Il existe une solution sur Internet, FSFindFolder en est un. qui peut être utilisé quelque chose comme ceci:FSFindFolder pour trouver un fichier/dossier dans la corbeille

FSFindFolder(kUserDomain, kTrashFolderType, true, &trashRef);

mais ne savent toujours pas comment passer le chemin du fichier que je veux déterminer en utilisant cette méthode

Répondre

4

Le dernier paramètre de FSFindFolder est un FSRef, qui peut être converti en un CFURLRef et à un NSURL:

FSRef trashRef; 
FSFindFolder(kUserDomain, kTrashFolderType, true, &trashRef); 
CFURLRef urlRef = CFURLCreateFromFSRef(NULL, &trashRef); 
NSURL *trashUrl = CFBridgingRelease(urlRef); 
NSString *trashPath = [trashUrl path]; 
NSLog(@"trash folder: %@", trashPath); 

(je l'ai omis de contrôle d'erreur pour l'amour de brev ité. Je suppose également que vous utilisez le comptage automatique de référence)

Maintenant, vous pouvez vérifier si un fichier donné est dans le dossier poubelle.

NSString *theFile = ...; // your file here 
NSString *fileInTrash = [trashPath stringByAppendingPathComponent:theFile]; 
BOOL isInTrash = [[NSFileManager defaultManager] fileExistsAtPath:fileInTrash]; 
NSLog(@"is in trash: %d", isInTrash); 

REMARQUE: Sous Mac OS X 10.8, FSFindFolder est dépréciée et vous pouvez utiliser le code suivant pour trouver le dossier Corbeille:

NSString *trashPath = [NSSearchPathForDirectoriesInDomains(NSTrashDirectory, NSUserDomainMask, YES) lastObject]; 
+0

Thanx. enfin je comprends le flux. en passant, j'ai une question, est-ce répertoire thrash pas toujours dans '[NSHomeDirectory() stringByAppendingPathComponent: @". Corbeille "];' – arufian

+0

@arufian: Je * pense * que c'était un chemin différent dans les premières versions de Mac OS X, mais je ne suis pas sûr de ça. Donc, ces choses peuvent changer entre les versions, et il est juste plus sûr d'utiliser la fonction au lieu d'un chemin codé en dur. –

+3

Le fichier peut être en volume externe (ex: clé USB). Dans ce cas, le répertoire de corbeille n'est pas dans le répertoire de base mais dans le volume. Vous pouvez utiliser [[NSFileManager defaultManager] URLForDirectory: NSTrashDirectory inDomain: NSUserDomainMask appropriéForURL: [NSURL fileURLWithPath: nomfichier] create: NO error: & error] 'pour obtenir le répertoire corbeille associé au fichier. –

Questions connexes