C# 使用dontnetzip压缩文件
我想通过将一些文件添加到zip文件来替换它们。我的意思是,在创建了zip之后,我应该不会再看到文件夹中的那些文件了 我能够使用dotNetZip的库压缩文件。但原始文件仍然存在。因为我已经把它们压缩了,所以我不想再把它们放在那个文件夹里 我试图删除它们(使用file.delete),但我得到一个错误,文件正在被程序使用 这是我写的C# 使用dontnetzip压缩文件,c#,zipfile,C#,Zipfile,我想通过将一些文件添加到zip文件来替换它们。我的意思是,在创建了zip之后,我应该不会再看到文件夹中的那些文件了 我能够使用dotNetZip的库压缩文件。但原始文件仍然存在。因为我已经把它们压缩了,所以我不想再把它们放在那个文件夹里 我试图删除它们(使用file.delete),但我得到一个错误,文件正在被程序使用 这是我写的 var files = directory.GetFiles("*.csv", SearchOption.AllDirectories); t
var files = directory.GetFiles("*.csv", SearchOption.AllDirectories);
try
{
using (Ionic.Zip.ZipFile zip = new Ionic.Zip.ZipFile())
{
foreach (var file in files)
{
sendEmail.SendMailMessage(file.FullName);
// zip.AddFile(file.FullName);
}
// zip.Save(Path.Combine(filePath,dirDate, "logs.zip"));
}
foreach (var file in files)
{
File.Delete(file.FullName);
}
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
}
这可能很傻,但我真的被卡住了。请导游
我得到的错误是:
System.IO.IOException: The process cannot access the file 'D:\***.csv' because it is being used by another process.
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.File.InternalDelete(String path, Boolean checkHost)
at System.IO.File.Delete(String path)
at Program.Main(String[] args) in d:\Documents\\**
在代码中,您没有使用任何
File.Delete()
方法-请始终提供产生错误的代码
但是,很可能您只是试图使用-block删除中的文件。当您将文件添加到zip文件时,这些文件将被访问并锁定,因此您无法删除他。一旦ZipFile
对象被释放,文件也将被释放
var files = directory.GetFiles("*.csv", SearchOption.AllDirectories);
using (Ionic.Zip.ZipFile zip = new Ionic.Zip.ZipFile())
{
foreach (var file in files)
{
zip.AddFile(file.FullName);
}
zip.Save(Path.Combine(filePath, dirDate, "logs.zip"));
}
// Outside of using block
foreach (var file in files)
{
File.Delete(file.FullName);
}
您缺少了一个}
,是否在资源管理器中打开了该文件夹?我宁愿先将文件名存储在列表中,因为假设在压缩过程中可以创建一个新的csv文件,并且您会在未添加到压缩文件时将其删除。@很好,我相应地更改了代码。我还添加了Path.Combine
而不是手动连接Path。我按照您的建议[在代码中进行了编辑]。但是我得到了同样的错误。请看,我已经复制了整个代码块。如果调用SendMailMessage方法,似乎会抛出错误。如果我把它注释掉,delete可以正常工作。@user2901683您的新代码实际上与压缩无关。您确定该文件未被其他代码或其他程序锁定吗?这些文件的来源是什么?