2010-02-18 4 views
0

Если создать URL а-ля:Трейлинг слэш важен, но лишен?

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

, а затем зарегистрировать ее, чтобы посмотреть, что у меня есть а-ля:

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

слэш на «/ Документы /» удаляется. Не проблема, если это не важно. Но когда я сделаю

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

ошибка брошена. Если вместо этого, я передать NSString, который включает в себя слэш, это не ошибка на CFURLHasDirectoryPath, но не пройдет

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

И идея, что происходит? В идеале, я думаю, что если я смогу сохранить конечную косую черту в CFURLRef, она будет передавать ошибки, но я этого не знаю точно.

Любые мысли?

Спасибо.

ответ

1

Прототип CFURLCreateFromFileSystemRepresentation является

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

Если вы хотите каталог, проходят true до последнего параметра.


Кроме того, использование -stringByAppendingPathComponent: для добавления компонентов пути ("Documents") вместо -stringByAppendingString:. Первый будет иметь дело с косыми чертами для вас.

Используйте -[NSFileManager fileExistsAtPath:isDirectory:], чтобы проверить, действительно ли файл является каталогом.

+0

Не знал этого. Благодаря! –

Смежные вопросы