C# 使用Ionic zip压缩文件时捕获UnauthorizedAccessException

C# 使用Ionic zip压缩文件时捕获UnauthorizedAccessException,c#,ionic-zip,C#,Ionic Zip,我们的QA在生产过程中报告了以下错误: Access to the path "C: \ ProgramData \ avi \ Logs \ IMPMDesktopClient HTML Debug - Copy - Copy - Copy - Copy - Copy - Copy (2) - Copy.zip" was denied. At System.IO.__ Error.WinIOError (Int32 errorCode, String maybeFullPath) In

我们的QA在生产过程中报告了以下错误:

Access to the path "C: \ ProgramData \ avi \ Logs \ IMPMDesktopClient HTML Debug - Copy - Copy - Copy - Copy - Copy - Copy (2) - Copy.zip" was denied.
At System.IO.__ Error.WinIOError (Int32 errorCode, String maybeFullPath)
   In System.IO.FileStream.Init(String path, FileMode mode, FileAccessAccess, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptionsOptions, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy)
   At System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share)
   At Ionic.Zip.ZipEntry._WriteFileData(Stream s)
   At Ionic.Zip.ZipEntry.Write(Stream s)
   At Ionic.Zip.ZipFile.Save()
   At Ionic.Zip.ZipFile.Save(String fileName)
   At IMPMDesktopClient.LogUploader.ZipupLogsForPosting(String strFileTag)
   At IMPMDesktopClient.LogUploader.UploadLogs(TimeSpan timeout, String strTag)
我试着复制这个案例,但做不到。它已在我的机器上成功运行

目录C:\ProgramData\avi中有文件夹:Logs和Temp。该程序复制和压缩日志文件夹,并将其放在Temp中。如果压缩文件夹的大小大于4MB(比如说500MB),它会将压缩文件分成多个小于或大于4MB的较小压缩文件块

这是我的密码:请告诉我哪里可能出错

注意:我使用的是离子压缩库

private static string ZipupLogsForPosting(string strFileTag)
{
    string strDstPath = Updater.UpdateFolder; 
    string strZipFileName = string.Format("{0}_{1}_{2}_Logs.zip",
                                           Environment.MachineName,
                                           Environment.UserName,
                                           strFileTag.Substring(0, Math.Min(strFileTag.Length, 20)));

    var sb = new StringBuilder(strZipFileName);
    sb.RemoveTheseChars(Path.GetInvalidFileNameChars());
    strZipFileName = sb.ToString();

    string strZipPath = Path.Combine(strDstPath, strZipFileName);

    if (File.Exists(strZipPath))
    {
        if ((File.GetAttributes(strZipPath) & FileAttributes.ReadOnly) == FileAttributes.ReadOnly)
        {
            File.SetAttributes(strZipPath, FileAttributes.Normal);
        }
        File.Delete(strZipPath);
    }

    Log.Trace("Zipping up logs for posting, Tag='{0}'", strFileTag);
    Log.FlushAllLogs();

    using (var zip = new ZipFile())
    {
        zip.AddDirectory(Log.LogsPath);
        zip.Save(strZipPath);
    }

    return (strZipPath);
}

注意:请不要担心zip文件夹的拆分。在拆分之前尝试在开头压缩文件夹时会出现问题。

“C:\ProgramData\Presensoft\Logs\IMPMDesktopClient HTML调试-Copy-Copy-Copy-Copy-Copy-Copy-Copy(2)-Copy.zip”。路径太长了吗?QA复制文件多次只是为了增加文件夹的大小。这可能有用。错误与IONAL.zip无关。创建相同的文件夹结构我发现压缩文件夹如果打开,将创建一个临时压缩文件夹,如“C:\Users\userxyz\AppData\Local\Temp\Temp1\u IMPMDesktopClient\u HTML\u Debug-Copy-Copy-Copy-Copy-Copy-Copy(2)-Copy.zip\IXM-SW-PC\u userxyz\uu Logs.zip”,但尝试打开路径“C:\ProgramData\Presensoft\Logs\IMPMDesktopClient\U HTML\U Debug-Copy-Copy-Copy-Copy-Copy-Copy(2)-Copy.zip\IXM-SW-PC\U userxyz\U Logs.zip“会出错的!隐马尔可夫模型。。。看起来情况类似。但我不知道为什么,我试过,但我看不到临时压缩文件夹。同样,QA说,对于相同的场景,当她使用admin previlage请求机器的日志时,日志被压缩并上传。但使用本地帐户的用户失败了。并且在机器的临时文件中没有创建进一步的zip。。。但是临时文件实际上是由我在不同的位置创建的。你能考虑一下吗?我今天要把它做完(