c# - 从 Log4Net 日志文件创建 zip 会导致 System.IO.IOException

标签 c# zip log4net

我正在使用一个简单的代码片段从 log4net 日志文件创建一个 zip 文件。请参阅下面的代码。

var logFiles = Directory.GetFiles(log4netfolderName, "*.log*");
 using (var zip = ZipFile.Open(destinationDirectory.DirectoryPath  + "Test.zip", 
 ZipArchiveMode.Create))
 {
     foreach (var file in logFiles)
     {
         zip.CreateEntryFromFile(file, 
         Path.GetFileName(file), CompressionLevel.Optimal);
     } 
 }

问题是 log4net 当前正在使用日志文件,我得到一个 进程无法访问文件 '',因为它正被另一个进程使用。” (System.IO.IOException)

我也无法更改 log4net 配置以使用 Process cannot access the file "MyFile.log" because it is being used by another process 中给出的最小锁或者不知道如何在 ZipFile 上使用 FileStream类(class)。我应该如何解决这个问题?

最佳答案

找到 ZipFileExtensions类并使用它的代码重写我的。修复过程是这样的,请随时更正或改进我的答案。

var logFiles = Directory.GetFiles(folderName,"*.log.*");
using (var zip = ZipFile.Open(destinationDirectory.DirectoryPath + "Test.zip",
ZipArchiveMode.Create))
{
    foreach (var file in logFiles)
    {
        using (var stream = new FileStream(file, FileMode.Open, FileAccess.Read,
            FileShare.Delete | FileShare.ReadWrite))
        {
            var zipArchiveEntry = zip.CreateEntry(Path.GetFileName(file),
                CompressionLevel.Optimal);
            using (var destination1 = zipArchiveEntry.Open())
                stream.CopyTo(destination1);
        }
    }
}

关于c# - 从 Log4Net 日志文件创建 zip 会导致 System.IO.IOException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25780618/

相关文章:

C# InvokeScript 给出错误 80020006

html - Mikeal 请求正文格式错误

ruby-on-rails - 在内存 Ruby/Rails 中压缩和加密文件

Nhibernate show_sql=false 不工作

c# - log4net 日志文件在哪里?

c# - 从下一个控件触发 KeyUp 事件

c# - 在 WinForms 中使用已编译的 WPF 控件(dll)?

c# - Log4Net 自定义附加程序 : How to log messages using a custom appender?

c# - 为什么我们使用内部类?

python - 将多列合并为矩阵python