16

ファイルを添付ファイルとして送信しています:

            // Create  the file attachment for this e-mail message.
            Attachment data = new Attachment(filePath, MediaTypeNames.Application.Octet);
            // Add time stamp information for the file.
            ContentDisposition disposition = data.ContentDisposition;
            disposition.CreationDate = System.IO.File.GetCreationTime(filePath);
            disposition.ModificationDate = System.IO.File.GetLastWriteTime(filePath);
            disposition.ReadDate = System.IO.File.GetLastAccessTime(filePath);
            // Add the file attachment to this e-mail message.
            message.Attachments.Add(data);

そして、ファイルを別のフォルダーに移動したいのですが、これを実行しようとすると

                    try
                    {
                        //File.Open(oldFullPath, FileMode.Open, FileAccess.ReadWrite,FileShare.ReadWrite);
                        File.Move(oldFullPath, newFullPath);

                    }
                    catch (Exception ex)
                    {
                    }

ファイルがすでに別のプロセスで使用されているという例外をスローします。この場所に移動できるように、このファイルのロックを解除するにはどうすればよいですか?

4

6 に答える 6

26

あなたの処分はあなたmessageのためにこれを修正します。Dispose次のように、ファイルを移動する前にメッセージを呼び出してみてください。

message.Dispose();
File.Move(...)

MailMessage を破棄すると、すべてのロックとリソースが解放されます。

于 2011-03-04T08:47:12.823 に答える
13

「using」キーワードを利用する必要があります。

using(Attachment att = new Attachment(...))
{
   ...
}

これは、"using" により、コード ブロックの実行の最後に IDisposable.Dispose メソッドが呼び出されることが保証されるためです。

リソースを管理しているクラスを使用するときはいつでも、それが IDisposable であるかどうかを確認してから「using」ブロックを使用すると、IDisposable.Dispose を呼び出して手動で破棄する必要はありません。

于 2011-03-04T08:47:29.487 に答える
6

添付ファイルIDisposableであり、送信後にファイルのロックを解除するために正しく破棄する必要があります。

于 2011-03-04T08:44:16.943 に答える
5

このファイル ロックが発生しないようusingにするには、オブジェクトを自動的に破棄する as を使用できます。

using (Attachment data = new Attachment(filePath, MediaTypeNames.Application.Octet))
{
    // Add time stamp information for the file.             
    ContentDisposition disposition = data.ContentDisposition;   
    disposition.CreationDate = System.IO.File.GetCreationTime(filePath);
    disposition.ModificationDate = System.IO.File.GetLastWriteTime(filePath);
    disposition.ReadDate = System.IO.File.GetLastAccessTime(filePath);
    // Add the file attachment to this e-mail message.
    message.Attachments.Add(data); 
    // Add your send code in here too
}
于 2011-03-04T08:47:01.617 に答える
0

共有された同様の問題。画像が作成されたファイルで何かを行う前に、特定の画像で image.dispose() を使用する必要がありました。

于 2016-06-19T16:02:13.850 に答える