C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[1]: 一時ファイル削除目的のIDisposable実装について


(過去ログ 177 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■101583 / inTopicNo.1)  一時ファイル削除目的のIDisposable実装について
  
□投稿者/ qp (1回)-(2023/03/17(Fri) 13:40:08)

分類:[VB.NET/VB2005 以降] 

VS2013〜2019(VB)

あるクラスの処理で、作業データを一時ファイルとして保存し、
必要に応じ一時ファイルを読み出すようなことを行っているのですが、
このクラスのインスタンスの使用が終わった時点で、
一時ファイルを削除するようにしたいと思っています。
色々調べたところ、IDisposableインタフェースを実装すればよさそうだと判りましたが、
これを試すために、対象クラスにImplements IDisposableを入れると、
自動的に以下のメソッドが追加されました。

Protected Overridable Sub Dispose(disposing As Boolean)
Public Sub Dispose() Implements IDisposable.Dispose

おそらく、前者のメソッドの中で一時ファイルを削除すればよいのだと思いますが、
どの分岐の中で一時ファイル削除のコードを書くのが適切なのでしょうか?

Protected Overridable Sub Dispose(disposing As Boolean)
    If Not Me.disposedValue Then
        If disposing Then
            ' TODO: マネージ状態を破棄します (マネージ オブジェクト)。
        End If

        ' TODO: アンマネージ リソース (アンマネージ オブジェクト) を解放し、下の Finalize() をオーバーライドします。
        ' TODO: 大きなフィールドを null に設定します。
    End If
    Me.disposedValue = True
End Sub

引用返信 編集キー/
■101587 / inTopicNo.2)  Re[1]: 一時ファイル削除目的のIDisposable実装について
□投稿者/ WebSurfer (2648回)-(2023/03/17(Fri) 14:50:57)
No101583 (qp さん) に返信

> このクラスのインスタンスの使用が終わった時点で、
> 一時ファイルを削除するようにしたいと思っています。

以下の記事の画像にあるように Visual Studio が自動的に Dispose パターンのコードの
骨組みを自動生成してくれたということですよね?

Dispose パターン
http://surferonwww.info/BlogEngine/post/2019/05/31/dispose-pattern.aspx

であれば、質問のコードにある、

> ' TODO: マネージ状態を破棄します (マネージ オブジェクト)。

の場所に「一時ファイルを削除する」コードを書けばよさそうです。
引用返信 編集キー/
■101589 / inTopicNo.3)  Re[1]: 一時ファイル削除目的のIDisposable実装について
□投稿者/ WebSurfer (2650回)-(2023/03/17(Fri) 16:22:33)
No101583 (qp さん) に返信

Dispose パターンを実装してファイルを削除するようにしたからと言って、自動的に
ファイルが削除されるわけではなく、プログラマがコードを書いて Dispose メソッド
が呼ばれるようにしないとダメということは理解されてますよね?

以下の記事のようなケースでフレームワークが Dispose を呼んでくれるという場合
は話が別ですが・・・

Dispose パターン (その 2)
http://surferonwww.info/BlogEngine/post/2020/06/20/dispose-pattern-2nd.aspx
引用返信 編集キー/
■101590 / inTopicNo.4)  Re[2]: 一時ファイル削除目的のIDisposable実装について
□投稿者/ qp (2回)-(2023/03/17(Fri) 16:58:55)

>>' TODO: マネージ状態を破棄します (マネージ オブジェクト)。
>
> の場所に「一時ファイルを削除する」コードを書けばよさそうです。

ありがとうございました。
Usingを使うか、明示的にDispose()を呼び出すことを想定しています。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -