次のコードを使用して、バンドルからiOSのドキュメントディレクトリにファイルをコピーしようとしています。いつかエラーが発生しました。バンドルからiOSのドキュメントディレクトリにファイルをコピーします
コード:
- (NSString*)getModuleHome{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *path = [[[paths objectAtIndex:0] stringByAppendingPathComponent:@"webapp" ]stringByAppendingPathComponent:@"modules"];
return path;
}
- (void)FirstLoad{
NSError *error;
if (![[NSFileManager defaultManager] fileExistsAtPath:[self getModuleHome]]) {
//建立目录
[[NSFileManager defaultManager] createDirectoryAtPath:[self getModuleHome] withIntermediateDirectories:YES attributes:nil error:nil];
}
NSUserDefaults *userDef = [NSUserDefaults standardUserDefaults];
BLYLogInfo(@"FirstLoad");
NSString *zipPath = [[NSBundle mainBundle] pathForResource:@"" ofType:@"zip"];
NSString *path = NSTemporaryDirectory();
NSString *dataPath = [path stringByAppendingPathComponent:@"modules.zip"];
if ([[NSFileManager defaultManager] fileExistsAtPath:dataPath]) {
BLYLogInfo(@"fileExistsAtPath dataPath");
[[NSFileManager defaultManager] removeItemAtPath:dataPath error:&error];
}
if(![[NSFileManager defaultManager] copyItemAtPath:zipPath toPath:dataPath error:&error])
{
BLYLogError(@"Error copying files: %@", [error localizedDescription]);
[Bugly reportError:error];
}
BLYLogInfo(@"FirstLoad Unzip");
NSString *unZipPath = [path stringByAppendingPathComponent: @"modules"];
if ([[NSFileManager defaultManager] fileExistsAtPath:unZipPath]) {
[[NSFileManager defaultManager] removeItemAtPath:unZipPath error:&error];
}
[SSZipArchive unzipFileAtPath:dataPath toDestination:unZipPath];
BLYLogInfo(@"FirstLoad Copy");
NSString *destinationPath = [self getModuleHome];
BLYLogInfo(@"FirstLoad destinationPath:%@",destinationPath);
if ([[NSFileManager defaultManager] fileExistsAtPath:destinationPath]) {
BLYLogWarn(@"FirstLoad removeItemAtPath");
[[NSFileManager defaultManager] removeItemAtPath:destinationPath error:&error];
}
if (![[NSFileManager defaultManager] copyItemAtPath:unZipPath toPath:destinationPath error:&error]) {
BLYLogError(@"FirstLoad Error copying files: %@", [error localizedDescription]);
[Bugly reportError:error];
NSLog(@"FirstLoad Clean");
[[NSFileManager defaultManager] removeItemAtPath:dataPath error:nil];
[[NSFileManager defaultManager] removeItemAtPath:unZipPath error:nil];
//加载出错
dispatch_async(dispatch_get_main_queue(), ^{
UIAlertView* view = [[UIAlertView alloc] initWithTitle:@"提示"
message:@"抱歉,资源加载失败,请关闭重试"
delegate:self
cancelButtonTitle:nil
otherButtonTitles:nil];
[view show];
});
}
else{
BLYLogInfo(@"FirstLoad Clean");
[[NSFileManager defaultManager] removeItemAtPath:dataPath error:nil];
[[NSFileManager defaultManager] removeItemAtPath:unZipPath error:nil];
[userDef setObject:@"NO" forKey:@"UpdateFlag"];
[userDef synchronize];
[self FirstReload];
}
}
はログインアタッチ:
User Data: NSErrorUserInfo: { NSDestinationFilePath = "/var/mobile/Containers/Data/Application/3575F3DD-4DC7-4472-A3D0-D4FF86C40BEF/Documents/webapp/modules/ihub/img/cat.png"; NSFilePath = "/private/var/mobile/Containers/Data/Application/3575F3DD-4DC7-4472-A3D0-D4FF86C40BEF/tmp/modules/ihub/img/cat.png"; NSSourceFilePathErrorKey = "/private/var/mobile/Containers/Data/Application/3575F3DD-4DC7-4472-A3D0-D4FF86C40BEF/tmp/modules/ihub/img/cat.png"; NSUnderlyingError = "Error Domain=NSPOSIXErrorDomain Code=2 \"No such file or directory\""; NSUserStringVariant = ( Copy ); }
アプリがリリースされました。 ほとんどの携帯電話は正常です。 一部の電話機のみがこの問題を抱えています。 エラーが報告された各ログファイルは存在しない同じファイルではありません。
SAMPLE:
NSError(NSCocoaErrorDomain:4)The file“contractpayment-detail.html”doesn’t exist。 NSError(NSCocoaErrorDomain:4)The file “vacating.png” doesn’t exist. NSError(NSCocoaErrorDomain:4)The file “Mode.ts” doesn’t exist. NSError(NSCocoaErrorDomain:4)The file “SystemCtrl.js” doesn’t exist.
"??なぜそれを修正する方法"
pathForResource @ ""それはどういう意味ですか? –
すべてのzipファイルを検索します。指定された名前はありません – LvyLiu
それはすべてのZipファイル名を返します。あなたはファイルの名前を吸う必要があります。 –