听起来您所要问的只是如何为您的unzipFolder
每次生成一个唯一的名称。
只是不要使用硬编码的名称。几乎任何事情都会做。例如:
NSString *unzipFolderTemplate = [[CommonFunctions getCachePath] stringByAppendingPathComponent:@"temp.XXXXXX"];
char *template = strdup([template fileSystemRepresentation]);
if (mkdtemp(template)) {
NSString *unzipFolder = [NSString stringWithFileSystemRepresentation:template
length:strlen(template)];
free(template);
// do the work
[[NSFileManager defaultManager] removeItemAtPath:unzipFolder error:&e];
}
好处mkdtemp
是它为您创建了目录,并保证没有竞争条件、不知何故遗留的目录或其他问题。它也更安全,例如,有人编写破解或其他越狱黑客通过预测路径来利用您的代码。当然,缺点是您必须下拉到 C 字符串(这意味着显式free
)。但是,正如我所说,有很多可能性,几乎任何事情都可以。
另外,请注意我使用的是@"temp.XXXXXX"
,而不是@"/temp.XXXXXX/"
。那是因为-[stringByAppendingPathComponent:]
已经为您添加了任何必要的斜杠(实际上就是该方法的全部要点),并且目录创建函数不需要尾部斜杠,因此两个斜杠都是不必要的。
同时,我仍然对您尝试做的事情感到有些困惑。如果您需要为每条消息保留一个唯一的文件夹,并在完成该消息后删除该文件夹,并且您可以一次打开多条消息,则需要某种方式来记住哪个文件夹与哪个消息一起使用。
为此,创建一个NSMutableDictionary
地方,然后free(template)
你会想做类似的事情[tempFolderMap addObject:unzipFolder forKey:messageName]
。然后,在关闭消息时,您将执行[tempFolderMap objectForKey:messageName]
并使用removeItemAtPath:error:
消息的结果(然后您也可以从 中删除密钥tempFolderMap
)。