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 应用目录的主要内容,如果未能解决你的问题,请参考以下文章

文件夹中的 NSFileManager

在 iPhone 应用程序中打开文件 - NSFileManager isReadableFileAtPath 返回 NO

NSFileManager

NSFileManager 创建文件失败

NSFileManager创建文件夹

如果文件存在,不要保存到文件 NSFileManager