NSFileManager UUID 应用目录
Posted
技术标签:
【中文标题】NSFileManager UUID 应用目录【英文标题】:NSFileManager UUID app directory 【发布时间】:2013-03-26 23:49:07 【问题描述】:我正在使用 NSFileManager,我正在尝试将文件复制到路径“/var/mobile/Applications/7AC2295E-2775-41EA-B017-AB4048A09F0C/Document”,该文件将正常复制。
但每次我删除并再次安装应用程序时,“7AC2295E-2775-41EA-B017-AB4048A09F0C”的路径都会随机更改。那么,有没有办法获取我的应用程序的正确路径或搜索文件名,如果文件存在则替换\删除..etc文件?非常感谢。
【问题讨论】:
对不起,我没有告诉你我想在越狱设备上使用它。 检查我的回答中的编辑 【参考方案1】:在您的应用沙箱中访问Documents
目录的正确方法是:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = paths[0];
然后你创建你的路径:
NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"filename.ext"];
【讨论】:
【参考方案2】:你不必使用绝对路径,使用类似的东西
NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)objectAtIndex:0];
[[NSFileManager defaultManager] copyItemAtPath:[[NSBundle mainBundle]pathForResource:@"test" ofType:@"txt"] toPath:[documentsDirectory stringByAppendingPathComponent:@"test.txt"] error:nil];
这演示了将文件 test.txt
从应用程序包复制到文档目录。
做这样的事情来创建一个文件test.txt
[[NSFileManager defaultManager] createFileAtPath:[documentsDirectory stringByAppendingPathComponent:@"test.txt"] contents:[NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://a-cstudios.com/text.json"]] attributes:nil];
编辑
如果你使用这个并想在越狱设备上使用它,在沙箱中放东西和我之前说的一样,所以你仍然不必使用 UUID。如果你想把一些东西放在系统目录中,那就是你可以使用/usr/include/
之类的东西,或者你想要的任何地方。要将某些内容放入另一个应用程序沙箱中,您将必须使用完整路径,并且您必须知道 UUID,因为那不是您沙箱的一部分。因此,除非您将文件复制到 您 制作的应用中,否则您必须使用完整路径。
【讨论】:
感谢您让我知道这称为“绝对路径”。那么这将如何工作 [[NSFileManager defaultManager] createFileAtPath:@"/var/mobile/Applications/7AC2295E-2775-41EA-B017-AB4048A09F0C/Document" 那么绝对路径呢?@"/var/mobile/Applications/7AC2295E-2775-41EA-B017-AB4048A09F0C/Document"
是不必要的,因为使用 [documentsDirectory stringByAppendingPathComponent:@"Test.txt"
会返回,除非 7AC2295E-2775-41EA-B017-AB4048A09F0C
更改您不必更改代码,因为它会返回沙箱的文档目录。
我已经检查了你的代码,但文件写在“/mobile/Documents”我的应用程序上:“Applications/7AC2295E-2775-41EA-B017-AB4048A09F0C/Documents”
这很奇怪,因为我刚刚对其进行了测试,它写入了应用程序文档文件夹。你在使用documentsDirectory
字符串吗?
是的,你给我的时候我就用这个:[[NSFileManager defaultManager] copyItemAtPath:[[NSBundle mainBundle]pathForResource:@"test" ofType:@"txt"] toPath:[documentsDirectory stringByAppendingPathComponent :@"test.txt"] 错误:无];但这写在“mobile/Documents”上有什么问题吗?【参考方案3】:
如果您的应用程序需要将文件写入其 Documents 目录。 使用类似的东西:
NSString *filePath = NSHomeDirectory();
然后将您的实际文件名附加到 filePath。 然后在 FileManager 调用中使用 filePath。
【讨论】:
iOS 提供了一种更直接的方法来获取对Documents
目录的引用。有关正确方法,请参阅其他答案。使用NSHomeDirectory()
并对目录名称进行硬编码是可行的,但使用直接方法更安全。以上是关于NSFileManager UUID 应用目录的主要内容,如果未能解决你的问题,请参考以下文章
在 iPhone 应用程序中打开文件 - NSFileManager isReadableFileAtPath 返回 NO