Iphone 如何在iOS上每次打开唯一文件夹中的解压缩文件

Iphone 如何在iOS上每次打开唯一文件夹中的解压缩文件,iphone,objective-c,ios,xcode,cocoa-touch,Iphone,Objective C,Ios,Xcode,Cocoa Touch,在我的iOS应用程序上,我正在解压缩“app/temp”文件夹中的文件,如下所示: NSString *unzipFolder = [[CommonFunctions getCachePath] stringByAppendingPathComponent:@"/temp/"]; 一旦我完成了,我将删除以下项目: [[NSFileManager defaultManager] removeItemAtPath:unzipFolder error:&e]; 问题是bcz im正

在我的iOS应用程序上,我正在解压缩“app/temp”文件夹中的文件,如下所示:

NSString *unzipFolder = [[CommonFunctions getCachePath] stringByAppendingPathComponent:@"/temp/"];
一旦我完成了,我将删除以下项目:

    [[NSFileManager defaultManager] removeItemAtPath:unzipFolder error:&e];
问题是bcz im正在创建解压文件的多个副本一些文件图像名称相同,显示的图像错误,我没有发现为什么我的删除功能不起作用的错误

是否有任何方法可以为用户打开的每条邮件在不同路径上解压文件夹?
谢谢:)

听起来你所要问的就是如何每次为你的
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字符串(这意味着显式的
免费的
)。但是,正如我所说,有很多可能性,几乎任何事情都可以

另外,请注意,我使用的是
@“temp.XXXXXX”
,而不是
@/temp.XXXXXX/“
。这是因为
-[stringByAppendingPathComponent://code>已经为您添加了任何必要的斜杠(事实上,这就是方法的全部要点),并且目录创建函数不需要尾部斜杠,因此这两个斜杠都是不必要的

与此同时,我仍然对你想做的事感到困惑。如果您需要为每封邮件保留一个唯一的文件夹,并在处理完该邮件后删除该文件夹,并且您可以同时打开多封邮件,那么您需要某种方法来记住该邮件附带的文件夹


为此,在某个地方创建一个
NSMutableDictionary
,在
免费(模板)
之后,您将需要执行类似于
[tempFolderMap addObject:unzipFolder forKey:messageName]
的操作。然后,在关闭消息时,您将执行
[tempFolderMap objectForKey:messageName]
并将结果用于
removietematpath:error:
消息(然后您还可以从
tempFolderMap
中删除密钥).

听起来你所要问的就是如何每次为你的
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字符串(这意味着显式的
免费的
)。但是,正如我所说,有很多可能性,几乎任何事情都可以

另外,请注意,我使用的是
@“temp.XXXXXX”
,而不是
@/temp.XXXXXX/“
。这是因为
-[stringByAppendingPathComponent://code>已经为您添加了任何必要的斜杠(事实上,这就是方法的全部要点),并且目录创建函数不需要尾部斜杠,因此这两个斜杠都是不必要的

与此同时,我仍然对你想做的事感到困惑。如果您需要为每封邮件保留一个唯一的文件夹,并在处理完该邮件后删除该文件夹,并且您可以同时打开多封邮件,那么您需要某种方法来记住该邮件附带的文件夹


为此,在某个地方创建一个
NSMutableDictionary
,在
免费(模板)
之后,您将需要执行类似于
[tempFolderMap addObject:unzipFolder forKey:messageName]
的操作。然后,在关闭消息时,您将执行
[tempFolderMap objectForKey:messageName]
并将结果用于
removietematpath:error:
消息(然后您还可以从
tempFolderMap
中删除密钥).

您只是在问如何每次为解压文件夹创建一个唯一的名称,而不是每次都使用相同的名称?或者这里有更深层次的问题吗?还有一个小提示:
-[stringByAppendingPathComponent:
为您添加斜杠;你不应该添加它们。谢谢你,如果我能在一个唯一的文件夹中打开文件,并在我完成后将其删除,那就太好了!Bez每个消息的内容都会被覆盖,当用户打开消息时,您只是问如何每次为unzipFolder创建一个唯一的名称,而不是每次都使用相同的名称?或者这里有更深层次的问题吗?还有一个小提示:
-[stringByAppendingPathComponent:
为您添加斜杠;你不应该添加它们。谢谢你,如果我能在一个唯一的文件夹中打开文件,并在我完成后将其删除,那就太好了!Bez每个邮件内容都被覆盖,当用户在我的应用程序中打开邮件SSO时,我有从服务器下载的邮件列表,将其作为zip文件夹存储在数据库中,当用户单击邮件、im解压缩邮件并在web视图中显示时,它会像电子邮件列表一样显示。作为每个项目的点击,我希望有一个地方,我可以从数据库解压文件,并在web视图中显示html。我遇到的问题是临时文件夹没有被正确删除!并在解压文件夹中显示用户查看的以前的图像。非常感谢:)所以在我的应用程序中,我有从服务器下载的邮件列表,将其作为zip文件夹存储在数据库中,当用户单击邮件时,会像电子邮件列表一样显示,即时消息解压缩并显示在web视图中。作为每个项目的点击,我希望有一个地方,我可以从数据库解压文件,并在web视图中显示html。我遇到的问题是临时文件夹没有被正确删除!并显示以前的图像