我使用一个简单的代码片段从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。我该如何解决这个问题?
答案 0 :(得分: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);
}
}
}