LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

c# 上传压缩包(Zip/Rar) 解压,遍历文件夹和文件

admin
2025年2月13日 17:15 本文热度 275
:c# 上传压缩包(Zip/Rar) 解压,遍历文件夹和文件

/// <summary>

/// 解压压缩文件到指定目录

/// <param name="zipFilePath">压缩文件路径</param>

/// <summary>

/// <returns></returns>

public void MuliteImport(string zipFilePath)

{

//解压文件存放路径

    string unZipDir = string.Format("{0}/{1}/{2}/{3}", Config.GetValue("AnnexesFile"), "Decompress", LoginUserInfo.Get().userId, DateTime.Now.ToString("yyyyMMdd"));

    string FileEextension = Path.GetExtension(zipFilePath);//文件名后缀

//如果解压目录不存在则创建

    if (!Directory.Exists(unZipDir))

    {

        Directory.CreateDirectory(unZipDir);

    }

    if (FileEextension.ToLower() == ".zip")

    {

        Decompress(unZipDir, zipFilePath);

    }

    else if (FileEextension.ToLower() == ".rar")

    {

        DeCompressRar(unZipDir, zipFilePath);

    }

}


#region 解压缩文件

/// <summary>

/// 解压zip格式的文件(在工程中引用SharpZipLib)

/// </summary>

/// <param name="unZipDir">解压文件存放路径</param>

/// <param name="zipFilePath">压缩文件路径</param>

/// <returns></returns>

public void Decompress(string unZipDir, string zipFilePath)

{

    unZipDir = unZipDir + "/zip";

    if (!Directory.Exists(unZipDir))

        Directory.CreateDirectory(unZipDir);//生成解压目录

    byte[] data = new byte[2048];

    int size = 2048;

//一个ZIP文件中的条目,可以理解为压缩包里面的一个文件夹/文件

    ZipEntry theEntry = null;

//解压缩输出流,从压缩包中一个接一个的读出文档。

    using (ZipInputStream inputStream = new ZipInputStream(File.OpenRead(zipFilePath)))

    {

        while ((theEntry = inputStream.GetNextEntry()) != null)

        {

            if (!string.IsNullOrEmpty(theEntry.Name))

            {

                string fileName = Path.Combine(unZipDir, theEntry.Name);

                fileName = fileName.Replace('/', '\\');


                if (fileName.EndsWith("\\"))

                {

                    Directory.CreateDirectory(fileName);

                    ec_library_catalogueEntity catalogue = new ec_library_catalogueEntity();

                    continue;

                }

                using (FileStream streamWriter = File.Create(fileName))

                {

                    while (true)

                    {

                        size = inputStream.Read(data, 0, data.Length);

                        if (size <= 0) break;

                        streamWriter.Write(data, 0, size);

                    }

                    streamWriter.Close();

                }

            }

        }

        inputStream.Close();

    }

}


/// <summary>

/// 获取winrar的安装位置

/// </summary>

/// <returns></returns>

public static string ExistsWinRar()

{

    string result = string.Empty;

    string key = @"SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\WinRAR.exe";

    RegistryKey registryKey = Registry.LocalMachine.OpenSubKey(key);

    if (registryKey != null)

    {

        result = registryKey.GetValue("").ToString();

        registryKey.Close();

    }

    return result;

}


/// <summary>

/// 将格式为rar的压缩文件解压到指定的目录(本机必须安装winrar解压软件)

/// </summary>

/// <param name="unZipDir">解压后要保存到的目录</param>

/// <param name="zipFilePath">要解压rar文件的路径</param>

/// <returns></returns>

public void DeCompressRar(string unZipDir, string zipFilePath)

{

    var Compressfiles = new List<FileInfo>();

    string winrarPath = ExistsWinRar();

    if (!string.IsNullOrEmpty(winrarPath))

    {

        unZipDir = unZipDir + "/rar";

        if (!Directory.Exists(unZipDir))

            Directory.CreateDirectory(unZipDir);//生成解压目录

        string winrarDir = Path.GetDirectoryName(winrarPath);

        string commandOptions = string.Format("x {0} {1} -y", zipFilePath, unZipDir);

        ProcessStartInfo processStartInfo = new ProcessStartInfo();

        processStartInfo.FileName = Path.Combine(winrarDir, "rar.exe");

        processStartInfo.Arguments = commandOptions;

        processStartInfo.WindowStyle = ProcessWindowStyle.Hidden;


        Process process = new Process();

        process.StartInfo = processStartInfo;

        process.StartInfo.UseShellExecute = false;

        process.StartInfo.CreateNoWindow = true;

        process.Start();

        var files = 0;

        while (process.HasExited)

        {

            files++;

        }

        process.WaitForExit();

        process.Close();

        var dir = new DirectoryInfo(unZipDir);

        FindFile(dir, Compressfiles);

    }

    else

    {

//message = "请先安装winrar程序,再上传文件";

    }

}


//查找所有文件

public void FindFile(DirectoryInfo di, List<FileInfo> files)

{

    FileInfo[] fis = di.GetFiles();

    files.AddRange(fis);

    DirectoryInfo[] dis = di.GetDirectories();

    for (int j = 0; j < dis.Length; j++)

    {

        FindFile(dis[j], files);

    }

}

#endregion


该文章在 2025/2/13 17:16:39 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2025 ClickSun All Rights Reserved