欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

IOS下载资源zip到本地然后读取

程序员文章站 2022-05-18 10:15:52
思路是 1.ios下载服务器上的zip资源包(图片,声音等经过zip压缩的资源包)到本地 2.解压zip到程序目录 3.从程序目录加载资源文件   一、下载...

思路是

1.ios下载服务器上的zip资源包(图片,声音等经过zip压缩的资源包)到本地

2.解压zip到程序目录

3.从程序目录加载资源文件

 


一、下载zip资源


[cpp]
-(nsstring*)downloadtextfile:(nsstring*)fileurl   filename:(nsstring*)_filename 

    nsarray *documentpaths = nssearchpathfordirectoriesindomains(nsdocumentdirectory,  nsuserdomainmask,yes);//使用c函数nssearchpathfordirectoriesindomains来获得沙盒中目录的全路径。  
    nsstring *ourdocumentpath =[documentpaths objectatindex:0]; 
    nsstring *sandboxpath = nshomedirectory(); 
    nsstring *documentpath = [sandboxpath  stringbyappendingpathcomponent:@"testdownimgzip.app"];//将documents添加到sandbox路径上//testdownimgzip.app  
    nsstring *filename=[documentpath stringbyappendingpathcomponent:_filename];//filename就是保存文件的文件名  
    nsfilemanager *filemanager = [nsfilemanager defaultmanager]; 
    // copy the database sql file from the resourcepath to the documentpath  
    if ([filemanager fileexistsatpath:filename]) 
    { 
        return filename; 
    }else 
    { 
        nsurl *url = [nsurl urlwithstring:fileurl]; 
        nsdata *data = [nsdata datawithcontentsofurl:url]; 
        [data writetofile:filename atomically:yes];//将nsdata类型对象data写入文件,文件名为filename  
    } 
    return filename; 

-(nsstring*)downloadtextfile:(nsstring*)fileurl   filename:(nsstring*)_filename
{
    nsarray *documentpaths = nssearchpathfordirectoriesindomains(nsdocumentdirectory,  nsuserdomainmask,yes);//使用c函数nssearchpathfordirectoriesindomains来获得沙盒中目录的全路径。
    nsstring *ourdocumentpath =[documentpaths objectatindex:0];
    nsstring *sandboxpath = nshomedirectory();
    nsstring *documentpath = [sandboxpath  stringbyappendingpathcomponent:@"testdownimgzip.app"];//将documents添加到sandbox路径上//testdownimgzip.app
    nsstring *filename=[documentpath stringbyappendingpathcomponent:_filename];//filename就是保存文件的文件名
    nsfilemanager *filemanager = [nsfilemanager defaultmanager];
    // copy the database sql file from the resourcepath to the documentpath
    if ([filemanager fileexistsatpath:filename])
    {
        return filename;
    }else
    {
        nsurl *url = [nsurl urlwithstring:fileurl];
        nsdata *data = [nsdata datawithcontentsofurl:url];
        [data writetofile:filename atomically:yes];//将nsdata类型对象data写入文件,文件名为filename
    }
    return filename;
}

 

 

 

2.解压zip包


[cpp]
- (void)openzip:(nsstring*)zippath  unzipto:(nsstring*)_unzipto 

    ziparchive* zip = [[ziparchive alloc] init]; 
    if( [zip unzipopenfile:zippath] ) 
    { 
        bool ret = [zip unzipfileto:_unzipto overwrite:yes]; 
        if( no==ret ) 
        { 
            nslog(@"error"); 
        } 
        [zip unzipclosefile]; 
    } 
    [zip release]; 
     

- (void)openzip:(nsstring*)zippath  unzipto:(nsstring*)_unzipto
{
    ziparchive* zip = [[ziparchive alloc] init];
    if( [zip unzipopenfile:zippath] )
    {
        bool ret = [zip unzipfileto:_unzipto overwrite:yes];
        if( no==ret )
        {
            nslog(@"error");
        }
        [zip unzipclosefile];
    }
    [zip release];
   
}

 

3.调去函数


[cpp]
- (ibaction)showimg:(id)sender { 
    nsstring *filepath = [self downloadtextfile:@"https://www.xtox.net/img.zip" filename:@"img.zip"]; 
    nslog(filepath); 
     
    nsarray *documentpaths = nssearchpathfordirectoriesindomains(nsdocumentdirectory,  nsuserdomainmask,yes);//使用c函数nssearchpathfordirectoriesindomains来获得沙盒中目录的全路径。  
    nsstring *ourdocumentpath =[documentpaths objectatindex:0]; 
    nsstring *sandboxpath = nshomedirectory(); 
    nsstring *documentpath = [sandboxpath  stringbyappendingpathcomponent:@"testdownimgzip.app"];//将documents添加到sandbox路径上//testdownimgzip.app  
 
    [self openzip:filepath unzipto:documentpath]; 
    self.imgview.image = [uiimage imagenamed:@"img/1.png"]; 

- (ibaction)showimg:(id)sender {
    nsstring *filepath = [self downloadtextfile:@"https://www.xtox.net/img.zip" filename:@"img.zip"];
    nslog(filepath);
   
    nsarray *documentpaths = nssearchpathfordirectoriesindomains(nsdocumentdirectory,  nsuserdomainmask,yes);//使用c函数nssearchpathfordirectoriesindomains来获得沙盒中目录的全路径。
    nsstring *ourdocumentpath =[documentpaths objectatindex:0];
    nsstring *sandboxpath = nshomedirectory();
    nsstring *documentpath = [sandboxpath  stringbyappendingpathcomponent:@"testdownimgzip.app"];//将documents添加到sandbox路径上//testdownimgzip.app

    [self openzip:filepath unzipto:documentpath];
    self.imgview.image = [uiimage imagenamed:@"img/1.png"];
}