2010-02-18 6 views
0

Si je crée une url à la:Trailing slash important, mais dépouillé?

const UInt8 *pFilepath = (const UInt8 *)[[NSHomeDirectory() stringByAppendingString:@"/Documents/"] UTF8String]; 
CFURLRef ldestination = CFURLCreateFromFileSystemRepresentation (NULL, pFilepath, strlen((const char*)pFilepath), false); 

puis connectez-vous pour voir ce que j'ai à la:

NSLog(@"destination url:%@",(NSString*)ldestination); 

le slash sur "/ Documents /" est supprimé. Pas de problème si ce n'est pas important. Mais quand je le fais

dirPath = CFURLHasDirectoryPath(ldestination); 
if (!dirPath) { 
    fprintf(stderr, "no dice"); 
    return false; 
} 

l'erreur est levée. Si, au contraire, je passe une NSString qui inclut le slash, il n'a pas d'erreur sur le CFURLHasDirectoryPath, mais ne passe un

writeStream = CFWriteStreamCreateWithFile(kCFAllocatorDefault, ldestination); 
assert(writeStream != NULL); 

Et idée de ce qui se passe? Idéalement, je pense que si je peux garder la barre oblique sur CFURLRef, ça va passer les erreurs, mais je ne le sais pas à coup sûr.

Des pensées?

Merci.

Répondre

1

Le prototype de CFURLCreateFromFileSystemRepresentation est

CFURLRef CFURLCreateFromFileSystemRepresentation (
    CFAllocatorRef allocator, 
    const UInt8 *buffer, 
    CFIndex bufLen, 
    Boolean isDirectory // <------ note this 
); 

Si vous voulez un répertoire, passez true au dernier paramètre.


Aussi, utilisez -stringByAppendingPathComponent: pour ajouter des composants de chemin ("Documents") au lieu de -stringByAppendingString:. Le premier traitera les barres obliques pour vous. Utilisez -[NSFileManager fileExistsAtPath:isDirectory:] pour vérifier si un fichier est réellement un répertoire.

+0

Je ne le savais pas. Merci! –