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

.NET控制台程序多文件打包成Zip遇DirectoryNotFoundException错误求助

.NET控制台打包多文件为Zip报错解决方案

问题描述

尝试用.NET控制台程序将多个文件打包为单个Zip文件,代码如下:

using System;
using System.Collections.Generic;
using System.IO;
using System.IO.Compression;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConvertMultipleFilesIntoZip
{
    internal class Program
    {
        static void Main(string[] args)
        {
            //string SourcePath1 = @\"d:\\SRS_9.4.7.25_1033\";
            string SourcePath2 = @\"d:\\sanju2.nuspec\";
            string SourcePath1 = @\"d:\\sanju1.nuspec\";
            string DestinationPath = @\"d:\\Result9.zip\";
            if (File.Exists(DestinationPath))
            {
                File.Delete(DestinationPath);
            }
            string[] Files = { SourcePath1, SourcePath2 };
            foreach (string variableName in Files)
            {

                ZipFile.CreateFromDirectory(variableName, DestinationPath);

            }
            Console.WriteLine(DestinationPath);

        }
    }
}

运行后抛出错误:

Unhandled Exception: System.IO.DirectoryNotFoundException: Could not find a part of the path 'd:\sanju1.nuspec'.
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.FileSystemEnumerableIterator1.CommonInit() at System.IO.FileSystemEnumerableIterator1..ctor(String path, String originalUserPath, String searchPattern, SearchOption searchOption, SearchResultHandler1 resultHandler, Boolean checkHost) at System.IO.DirectoryInfo.EnumerateFileSystemInfos(String searchPattern, SearchOption searchOption) at System.IO.Compression.ZipFile.DoCreateFromDirectory(String sourceDirectoryName, String destinationArchiveFileName, Nullable1 compressionLevel, Boolean includeBaseDirectory, Encoding entryNameEncoding)
at System.IO.Compression.ZipFile.CreateFromDirectory(String sourceDirectoryName, String destinationArchiveFileName)
at ConvertMultipleFilesIntoZip.Program.Main(String[] args) in C:\Users\sanjeev_kushvaha\source\repos\ConvertMultipleFilesIntoZip\ConvertMultipleFilesIntoZip\Program.cs:line 27

解决方案

错误原因

ZipFile.CreateFromDirectory方法要求第一个参数传入目录路径,但你传入的是单个文件路径,方法会将文件路径当作目录查找,因此抛出DirectoryNotFoundException。同时,循环调用该方法会每次覆盖生成的Zip文件,最终仅保留最后一个文件的压缩结果。

修正代码

要打包多个单个文件,需使用ZipArchive类逐个添加文件到Zip包:

using System;
using System.IO;
using System.IO.Compression;

namespace ConvertMultipleFilesIntoZip
{
    internal class Program
    {
        static void Main(string[] args)
        {
            string sourcePath1 = @"d:\sanju1.nuspec";
            string sourcePath2 = @"d:\sanju2.nuspec";
            string destinationPath = @"d:\Result9.zip";

            // 删除已存在的目标Zip文件
            if (File.Exists(destinationPath))
            {
                File.Delete(destinationPath);
            }

            // 定义要打包的文件列表
            string[] filesToZip = { sourcePath1, sourcePath2 };

            // 创建ZipArchive并添加文件
            using (FileStream zipFileStream = new FileStream(destinationPath, FileMode.Create))
            {
                using (ZipArchive archive = new ZipArchive(zipFileStream, ZipArchiveMode.Create))
                {
                    foreach (string filePath in filesToZip)
                    {
                        // 检查文件是否存在
                        if (!File.Exists(filePath))
                        {
                            Console.WriteLine($"警告:文件 {filePath} 不存在,已跳过");
                            continue;
                        }

                        // 添加文件到Zip,保留原文件名
                        archive.CreateEntryFromFile(filePath, Path.GetFileName(filePath));
                    }
                }
            }

            Console.WriteLine($"Zip文件已生成:{destinationPath}");
        }
    }
}

代码说明

  1. 文件存在性检查:添加源文件存在验证,避免因文件缺失引发报错。
  2. 使用ZipArchive:通过CreateEntryFromFile方法将单个文件添加到Zip包,支持灵活添加多文件。
  3. 保留原文件名:用Path.GetFileName(filePath)获取文件名,确保Zip内文件名称与源文件一致。

内容的提问来源于stack exchange,提问作者Sanjeev singh kushvaha

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 09:35:16