Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用dontnetzip压缩文件_C#_Zipfile - Fatal编程技术网

C# 使用dontnetzip压缩文件

C# 使用dontnetzip压缩文件,c#,zipfile,C#,Zipfile,我想通过将一些文件添加到zip文件来替换它们。我的意思是,在创建了zip之后,我应该不会再看到文件夹中的那些文件了 我能够使用dotNetZip的库压缩文件。但原始文件仍然存在。因为我已经把它们压缩了,所以我不想再把它们放在那个文件夹里 我试图删除它们(使用file.delete),但我得到一个错误,文件正在被程序使用 这是我写的 var files = directory.GetFiles("*.csv", SearchOption.AllDirectories); t

我想通过将一些文件添加到zip文件来替换它们。我的意思是,在创建了zip之后,我应该不会再看到文件夹中的那些文件了

我能够使用dotNetZip的库压缩文件。但原始文件仍然存在。因为我已经把它们压缩了,所以我不想再把它们放在那个文件夹里

我试图删除它们(使用file.delete),但我得到一个错误,文件正在被程序使用

这是我写的

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您的新代码实际上与压缩无关。您确定该文件未被其他代码或其他程序锁定吗?这些文件的来源是什么?