如果我创建了一个网址:
const UInt8 *pFilepath = (const UInt8 *)[[NSHomeDirectory() stringByAppendingString:@"/Documents/"] UTF8String];
CFURLRef ldestination = CFURLCreateFromFileSystemRepresentation (NULL, pFilepath, strlen((const char*)pFilepath), false);
然后记录下来看看我有一个la:
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上保留尾随斜杠,它会传递错误,但我肯定不知道。
有什么想法吗?
感谢。
答案 0 :(得分:1)
CFURLCreateFromFileSystemRepresentation
的原型是
CFURLRef CFURLCreateFromFileSystemRepresentation (
CFAllocatorRef allocator,
const UInt8 *buffer,
CFIndex bufLen,
Boolean isDirectory // <------ note this
);
如果您需要目录,请将true
传递给最后一个参数。
另外,使用-stringByAppendingPathComponent:
附加路径组件(“Documents”)而不是-stringByAppendingString:
。前者会为你处理斜线。
使用-[NSFileManager fileExistsAtPath:isDirectory:]
检查文件是否真的是一个目录。