繁体   English   中英

如何在iCloud Drive上备份和还原.zip文件?

[英]How can I backup and restore .zip file on iCloud Drive?

我想将.zip文件存储在iCloud上。 有人帮助我如何上传和还原吗? 我已经阅读了iCloud备份的Apple指南,现在我已经创建了一个包含一些文件的文件夹和两个包含多个图像的文件夹,然后生成该文件夹的zip文件。

  1. 首先将文件和文件夹保存在本地存储中。
  2. 然后创建此文件和文件夹的Zip文件。
  3. 最后在iCloud上上传您的zip文件。
  4. 为了得到这个文件做反向过程。
- (void)viewDidLoad {
    [super viewDidLoad];

    [self CreatFileAndFolder];

}

在本地创建文件夹,然后将要上传到iCloud Drive的文件保存在该文件夹中。

-(void)CreatFileAndFolder{

    NSError *error;
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0]; // Get documents folder
    NSString *dataPath = [documentsDirectory stringByAppendingPathComponent:@"/meetInChat"];

    if (![[NSFileManager defaultManager] fileExistsAtPath:dataPath])
        [[NSFileManager defaultManager] createDirectoryAtPath:dataPath withIntermediateDirectories:NO attributes:nil error:&error];


    NSString *stringToWrite = @"1\n2\n3\n41\n2\n3\n41\n2\n3\n41\n2\n3\n41\n2\n3\n41\n2\n3\n41\n2\n3\n41\n2\n3\n41\n2\n3\n41\n2\n3\n41\n2\n3\n41\n2\n3\n41\n2\n3\n41\n2\n3\n41\n2\n3\n41\n2\n3\n4";


    NSString *exportPath = [dataPath stringByAppendingString:@"/mytext.txt"];
    [stringToWrite writeToFile:exportPath atomically:YES encoding:NSUTF8StringEncoding error:&error];

}

创建操作,该操作首先在文件夹中创建Zip文件,然后在iCloud Drive上上传Zip文件。

-(IBAction) iCloudSyncing:(id)sender
{
    [self zipFolder];

    //--------------------------Zip Folder Upload on iCloud-----------------------------//

    NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
    NSString *zipFilePath = [documentsDirectory stringByAppendingPathComponent:@"meetInChat.zip"];
    NSLog(@"FilePath=>%@",zipFilePath);
    NSURL *u = [[NSURL alloc] initFileURLWithPath:zipFilePath];
    NSData *data = [[NSData alloc] initWithContentsOfURL:u];

    NSURL *ubiq = [[NSFileManager defaultManager]URLForUbiquityContainerIdentifier:nil];
    NSURL *ubiquitousPackage = [[ubiq URLByAppendingPathComponent:@"Documents"]URLByAppendingPathComponent:@"meetInChat.zip"];
    Mydoc = [[MyDocument alloc] initWithFileURL:ubiquitousPackage];
    Mydoc.zipDataContent = data;

    [Mydoc saveToURL:[Mydoc fileURL] forSaveOperation:UIDocumentSaveForCreating completionHandler:^(BOOL success)
     {
         if (success)
         {
             NSLog(@"PictureZip: Synced with icloud");

             [[NSUbiquitousKeyValueStore defaultStore]setData:data forKey:@"meetInChat"];
         }
         else
             NSLog(@"PictureZip: Syncing FAILED with icloud");

     }];
}

从您的文件夹创建Zip文件

-(BOOL)zipFolder
{

//--------------------------Create Zip Folder -----------------------------//
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *docDirectory = [paths objectAtIndex:0];
    BOOL isDir=NO;
    NSArray *subpaths = nil;
    NSString *exportPath = [docDirectory stringByAppendingString:@"/meetInChat"];

    NSFileManager *fileManager = [NSFileManager defaultManager];
    if ([fileManager fileExistsAtPath:exportPath isDirectory:&isDir] && isDir){
        subpaths = [fileManager subpathsAtPath:exportPath];
    }

    NSString *meetInChatPath = [docDirectory stringByAppendingString:[NSString stringWithFormat:@"/%@.zip",@"meetInChat"]];

    ZipArchive *archiver = [[ZipArchive alloc] init];
    [archiver CreateZipFile2:meetInChatPath];


    if (isDir) {
        for(NSString *path in subpaths){
            NSString *fullPath = [exportPath stringByAppendingPathComponent:path];
            if([fileManager fileExistsAtPath:fullPath isDirectory:&isDir] && !isDir){
                [archiver addFileToZip:fullPath newname:path];
            }
        }
    } else {
        [archiver addFileToZip:exportPath newname:@"meetInChat"];
    }

    BOOL successCompressing = [archiver CloseZipFile2];
    if(successCompressing)
        return YES;
    else
        return NO;
}

在这里,从iCloud Drive取回ZipFile,然后进行反向处理解压缩文件并取回数据。

- (IBAction)GetData:(id)sender {

    //--------------------------Get data back from iCloud -----------------------------//
    id token = [[NSFileManager defaultManager] ubiquityIdentityToken];
    if (token == nil)
    {
        NSLog(@"ICloud Is not LogIn");
    }
    else
    {
        NSLog(@"ICloud Is LogIn");

        NSData *dataFile = [[NSUbiquitousKeyValueStore defaultStore]dataForKey:@"meetInChat"];

        NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
        NSString* fileName = [NSString stringWithFormat:@"meetInChat.zip"];
        NSString* fileAtPath = [documentsDirectory stringByAppendingPathComponent:fileName];

        [dataFile writeToFile:fileAtPath atomically:NO];

    }      
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM