如何备份和恢复 iCloud Drive 上的 .zip 文件?

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

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

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

    [self CreatFileAndFolder];

}

Create Folder on local and save file in this folder that you want upload on 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];

}

Create Action that First Create Zip file your Folder and then Upload your Zip file on iCloud Drive.

-(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");

     }];
}

Create Zip file from your folder

-(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;
}

Here Get ZipFile back From iCloud Drive then Doing reverse process Unzip your file and get data back.

- (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];

    }      
}