尾随斜线很重要,但被剥离了?

时间:2010-02-18 06:05:15

标签: iphone c objective-c

如果我创建了一个网址:

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上保留尾随斜杠,它会传递错误,但我肯定不知道。

有什么想法吗?

感谢。

1 个答案:

答案 0 :(得分:1)

CFURLCreateFromFileSystemRepresentation的原型是

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

如果您需要目录,请将true传递给最后一个参数。


另外,使用-stringByAppendingPathComponent:附加路径组件(“Documents”)而不是-stringByAppendingString:。前者会为你处理斜线。

使用-[NSFileManager fileExistsAtPath:isDirectory:]检查文件是否真的是一个目录。