0

一部のファイルを 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\\**
4

1 に答える 1

1

あなたのコードでは、File.Delete()メソッドを使用していません - エラーを作成するコードを常に提供してください。

ただし、ほとんどの場合、ブロック内のファイルを単に削除しようとしているだけですusing。ファイルを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);
}
于 2013-10-28T05:45:52.567 に答える