You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何向已有的Zip文件/文件夹中追加文件?

向已有Zip文件追加文件的MATLAB解决方案

可以向已有Zip文件追加文件,MATLAB自带的zip(zipfilename, filenames)函数确实会直接覆盖原文件,以下是Windows 10环境下的两种可行方案:

方案一:调用Windows PowerShell命令

利用Windows 10自带的PowerShell的Compress-Archive命令,通过-Update参数实现文件追加或更新,示例代码:

zipfilename = 'existing.zip';
files_to_add = {'newfile1.txt', 'subfolder/newfile2.mat'};

% 逐个追加文件到已有Zip
for file = files_to_add
    cmd = sprintf('powershell Compress-Archive -Path "%s" -DestinationPath "%s" -Update', file{1}, zipfilename);
    [status, result] = system(cmd);
    if status ~= 0
        warning('追加文件%s失败:%s', file{1}, result);
    end
end

注:该命令要求Windows 10 1607及以上版本,若系统版本过低可能无法使用Compress-Archive。

方案二:调用Java压缩类(跨平台兼容)

MATLAB内置Java环境,可直接使用java.util.zip包实现追加,示例代码:

zipfilename = 'existing.zip';
files_to_add = {'newfile1.txt', 'subfolder/newfile2.mat'};

% 以追加模式打开已有Zip文件
zipFile = java.io.File(zipfilename);
fileOut = java.io.FileOutputStream(zipFile, true);
zipOut = java.util.zip.ZipOutputStream(fileOut);

for file = files_to_add
    inputFile = java.io.File(file{1});
    % 创建Zip条目并写入文件内容
    zipEntry = java.util.zip.ZipEntry(inputFile.getName());
    zipOut.putNextEntry(zipEntry);
    
    fileIn = java.io.FileInputStream(inputFile);
    buffer = java.io.BufferedInputStream(fileIn);
    bytes = uint8(buffer.readAllBytes());
    zipOut.write(bytes, 0, length(bytes));
    
    % 关闭当前条目与输入流
    zipOut.closeEntry();
    fileIn.close();
end

% 关闭输出流
zipOut.close();
fileOut.close();

注:该方法若遇到Zip内已有同名文件,会添加重复条目;若需替换同名文件,需先读取原有Zip的所有条目,过滤后重新写入。

内容的提问来源于stack exchange,提问作者Argyll

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 19:54:29