Конечный слеш важен, но убран? - PullRequest
0 голосов
/ 18 февраля 2010

Если я создаю 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);

завершающий слеш на "/ Documents /" удален. Не проблема, если это не важно. Но когда я делаю

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

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

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

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

Есть мысли?

Спасибо.

1 Ответ

1 голос
/ 18 февраля 2010

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

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

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


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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...