- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
在我的应用中,当用户进行应用内购买时,应用需要下载一个 zip 文件并将其解压缩到应用的文档文件夹中。下载 zip 文件并解压缩。我正在使用 Objective Zip解压缩文件。问题是当尝试为每个文件创建文件夹路径时,文件夹永远不会创建,也没有错误。
这是发生这种情况的部分的一些示例代码:
// Create file manager
NSFileManager *fileMgr = [NSFileManager defaultManager];
//Unzip
NSString *applicationDocumentsDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
ZipFile *unzipFile = [[ZipFile alloc] initWithFileName:[applicationDocumentsDir stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.zip",@"Mid America Oireachtas 2011"]] mode:ZipFileModeUnzip];
NSArray *infos= [unzipFile listFileInZipInfos];
for (FileInZipInfo *info in infos) {
//NSLog(@"- %@ %@ %d (%d)", info.name, info.date, info.size, info.level);
// Locate the file in the zip
[unzipFile locateFileInZip:info.name];
// Expand the file in memory
ZipReadStream *read= [unzipFile readCurrentFileInZip];
NSMutableData *data= [[NSMutableData alloc] initWithLength:info.length];
int bytesRead = [read readDataWithBuffer:data];
[read finishedReading];
NSString *appSupportFolder = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSString *pathfull = [appSupportFolder stringByAppendingPathComponent:info.name];
NSString *path = [[pathfull stringByDeletingLastPathComponent] copy];
NSError *errorw;
NSRange range = [path rangeOfString:@"__MACOSX"];
if (range.location == NSNotFound) {
NSLog(@"last: %@", [path lastPathComponent]);
if ([fileMgr createDirectoryAtPath:path withIntermediateDirectories:YES attributes:nil error:&errorw]) {
NSLog(@"Create Folder: %@", path);
NSLog(@"Directory Win: %@", errorw);
if (![[pathfull pathExtension] isEqualToString:@""] && ![[[pathfull lastPathComponent] substringToIndex:1] isEqualToString:@"." ]) {
[data writeToFile:pathfull atomically:NO];
}
}
else {
//NSLog(@"Create Folder: %@", path);
NSLog(@"Directroy Fail: %@", errorw);
}
}
}
[unzipFile close];
//delete zip
// For error information
NSError *error;
if ([fileMgr removeItemAtPath:[applicationDocumentsDir stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.zip",@"Mid America Oireachtas 2011"]] error:&error] == YES) {
NSLog(@"File Deleted");
}
//delete zip
// For error information
NSError *error;
if ([fileMgr removeItemAtPath:[applicationDocumentsDir stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.zip",@"My Zip"]] error:&error] == YES) {
NSLog(@"File Deleted");
}
这是日志文件的相关输出片段:
2012-01-04 17:12:51.509 WhatsMyStageOn[3232:15503] Create Folder: /Users/Brandon/Library/Application Support/iPhone Simulator/5.0/Applications/436C2C49-D79B-4CDA-B0AA-15BB98F6F75E/WhatsMyStageOn.app/
2012-01-04 17:12:51.510 WhatsMyStageOn[3232:15503] Directory Win: (null)
2012-01-04 17:12:51.510 WhatsMyStageOn[3232:15503] Create Folder: /Users/Brandon/Library/Application Support/iPhone Simulator/5.0/Applications/436C2C49-D79B-4CDA-B0AA-15BB98F6F75E/WhatsMyStageOn.app/Documents/Mid America Oireachtas 2011
2012-01-04 17:12:51.510 WhatsMyStageOn[3232:15503] Directory Win: (null)
2012-01-04 17:12:51.510 WhatsMyStageOn[3232:15503] Create Folder: /Users/Brandon/Library/Application Support/iPhone Simulator/5.0/Applications/436C2C49-D79B-4CDA-B0AA-15BB98F6F75E/WhatsMyStageOn.app/Documents
2012-01-04 17:12:51.510 WhatsMyStageOn[3232:15503] Directory Win: (null)
2012-01-04 17:12:51.511 WhatsMyStageOn[3232:15503] Create Folder: /Users/Brandon/Library/Application Support/iPhone Simulator/5.0/Applications/436C2C49-D79B-4CDA-B0AA-15BB98F6F75E/WhatsMyStageOn.app/Documents/__MACOSX
2012-01-04 17:12:51.511 WhatsMyStageOn[3232:15503] Directory Win: (null)
2012-01-04 17:12:51.511 WhatsMyStageOn[3232:15503] Create Folder: /Users/Brandon/Library/Application Support/iPhone Simulator/5.0/Applications/436C2C49-D79B-4CDA-B0AA-15BB98F6F75E/WhatsMyStageOn.app/Documents/__MACOSX/Mid America Oireachtas 2011
2012-01-04 17:12:51.511 WhatsMyStageOn[3232:15503] Directory Win: (null)
2012-01-04 17:12:51.511 WhatsMyStageOn[3232:15503] Create Folder: /Users/Brandon/Library/Application Support/iPhone Simulator/5.0/Applications/436C2C49-D79B-4CDA-B0AA-15BB98F6F75E/WhatsMyStageOn.app/Documents/Mid America Oireachtas 2011
2012-01-04 17:12:51.512 WhatsMyStageOn[3232:15503] Directory Win: (null)
2012-01-04 17:12:51.544 WhatsMyStageOn[3232:15503] Create Folder: /Users/Brandon/Library/Application Support/iPhone Simulator/5.0/Applications/436C2C49-D79B-4CDA-B0AA-15BB98F6F75E/WhatsMyStageOn.app/Documents/Mid America Oireachtas 2011/Attractions
2012-01-04 17:12:51.544 WhatsMyStageOn[3232:15503] Directory Win: (null)
阅读 NSFileManager 文档,这是应该在日志中输出的内容,但是,没有创建文件夹。
编辑:修复了不使用文档的问题,仍然存在与编辑前谴责的相同问题。
编辑:更新了工作解决方案的代码!
最佳答案
您不应该写入应用程序的 bundle 本身。试试这个:
NSString *appSupportFolder = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSString *path = [appSupportFolder stringByAppendingPathComponent:info.name];
关于objective-c - NSFileManager createDirectoryAtPath :withIntermediateDirectories: Not creating directories or creating errors,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8734964/
我已经在这个问题上工作了一段时间了,但似乎无法解决它。我有一个也支持文档共享的核心数据应用程序,因此我尝试在 sqlite 数据库的库文件夹中创建一个目录。 - (NSURL *)applicatio
我有一个名为“My/Project”的文件夹。当我尝试调用 createDirectoryAtPath 时,我创建了两个文件夹“我的”,其中一个子文件夹为“项目”。 我看过终端是如何表示的: /Use
我正在为现有的 iPhone 应用程序开发一项新功能,并想在该应用程序的本地“文档”文件夹中创建几个新目录。我已经使用推荐的方法成功完成了此操作: [NSFileManager createDirec
我正在为 sqlite 数据库使用 SwiftData 框架。当我将 Xcode 表单 6.4 更新为 7.0.1 时,swift data.swift 文件显示此错误 Cannot invoke '
当我尝试使用下面的代码创建一个文件夹时,当我尝试创建一个已经存在的文件夹而不是返回 YES 时,它返回 NO 并出错: [[NSFileManager defaultManager] createDi
我正在尝试创建一个新文件夹,但我不知道如何正确使用 createDirectoryAtPath。 根据文档,这是正确的语法: NSFileManager.createDirectoryAtPath(_
在iOS9之前,我们已经创建了这样一个目录 let documentsPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .U
在我的应用中,当用户进行应用内购买时,应用需要下载一个 zip 文件并将其解压缩到应用的文档文件夹中。下载 zip 文件并解压缩。我正在使用 Objective Zip解压缩文件。问题是当尝试为每个文
我是一名优秀的程序员,十分优秀!