IOS下载并解压zip文件

首先导入zipArchive库,点击下载


    func downloadSource(path:NSString){
        var url =  NSURL(string: NSString(format: "%@/sources/\(path)", server))
        var request = NSURLRequest(URL: url!)
        var data:NSData? = NSURLConnection.sendSynchronousRequest(request, returningResponse: nil, error: nil)
        if((data) != nil){
            var str = NSHomeDirectory().stringByAppendingPathComponent("Library/\(path)")
            if data!.writeToFile(str, atomically: true) {
                println("下载完成 OK")
                if(zip.UnzipOpenFile(str)){
                    var path = NSHomeDirectory().stringByAppendingPathComponent("Library/sources");
                    if zip.UnzipFileTo(path, overWrite: true){
                        println("解压OK")
                        NSFileManager.defaultManager().removeItemAtPath(str, error: nil)     
                        
                    }else{
                        
                        println("解压 fail")
                    }
                }else{
                    println("解压 fail")
                }
            }
        }
      
    }


  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在MFC中ZIP文件并显示进度,可以使用Windows API中的ZipArchive类和ZipFile类。以下是一个简单的示例代码,可以在MFC应用程序中使用: ```c++ #include <iostream> #include <fstream> #include <Windows.h> #include <zipapi.h> // 回调函数,用于显示进度 BOOL CALLBACK MyProgressCallback(ZIP_PROGRESS_CALLBACK_REASON reason, DWORD64 bytesProcessed, DWORD64 totalBytesToProcess, PVOID userData) { int progress = (int)(bytesProcessed * 100 / totalBytesToProcess); std::cout << "Unzipping: " << progress << "%" << std::endl; return TRUE; } void UnzipFile(LPCTSTR zipFileName, LPCTSTR destFolder) { // 创建ZipArchive对象 ZipArchive zipArchive; if (!zipArchive.Open(zipFileName)) { std::cout << "Failed to open zip file" << std::endl; return; } // 获取ZIP文件中的文件数量 int fileCount = zipArchive.GetFileCount(); // 遍历ZIP文件中的所有文件 for (int i = 0; i < fileCount; i++) { // 获取文件名和文件大小 CString fileName = zipArchive.GetFileName(i); DWORD fileSize = zipArchive.GetFileSize(i); // 创建ZipFile对象 ZipFile zipFile; if (!zipFile.Open(&zipArchive, i)) { std::cout << "Failed to open zip file for reading" << std::endl; continue; } // 创建目标文件 CString destFilePath = destFolder + fileName; std::ofstream destFile(destFilePath, std::ios::out | std::ios::binary); if (!destFile) { std::cout << "Failed to create destination file" << std::endl; continue; } // 文件并显示进度 if (!zipFile.ExtractFile(&MyProgressCallback, NULL, &destFile)) { std::cout << "Failed to extract file: " << fileName << std::endl; continue; } std::cout << "Extracted file: " << fileName << std::endl; } } int main() { LPCTSTR zipFileName = L"C:\\test.zip"; LPCTSTR destFolder = L"C:\\test\\"; UnzipFile(zipFileName, destFolder); return 0; } ``` 在上面的示例代码中,我们首先通过ZipArchive类打开ZIP文件,然后遍历ZIP文件中的所有文件,并使用ZipFile类将文件到目标文件夹中。在过程中,我们使用回调函数MyProgressCallback来显示进度,该函数在每个文件之前都会被调用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值