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

Car*_*ine 3 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);
     } 
 }
Run Code Online (Sandbox Code Playgroud)

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

此外,我无法更改log4net配置以使用进程中给出的最小锁定无法访问文件"MyFile.log",因为它正被另一个进程使用或者不知道如何在ZipFile类上使用FileStream .我该如何解决这个问题?

Car*_*ine 6

找到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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)