ファイルの移動・削除

解決


PN  2008-12-14 22:52:10  No: 145488  IP: 192.*.*.*

こんばんわ。

私が今作成しているプログラムで、Log4netを使用してログを出力していますが、その出力先のファイルをMoveで移動させようとすると、エラーが発生します。
内容は、他のプロセスが使っているから、移動できないというような内容です。

このファイルを移動させるためにはどうすればよいでしょうか?

また、今回の件に拘らず、ファイルを使っていると今回のようなエラーが頻繁に発生します。

ストリームにファイルを読込んだときとか、画像のファイルを読込んだときとか。
DisposeやCloseはきちんとやっているのに、エラーが発生してしまうのです。

上記以外に何か、ファイルを扱うときに気をつけなければならないことがあるのでしょうか?

編集 削除
それなら  2008-12-15 12:16:42  No: 145489  IP: 192.*.*.*

回答ではありません。
#回答する知識もありません

>DisposeやCloseはきちんとやっている

かどうかを操作の後に確認すればいいのでは?

文面からは、
「文法上はきちんとやっているので間違いはない」
という思惑があるように思います。

編集 削除
aetos  2008-12-15 12:52:13  No: 145490  IP: 192.*.*.*

log4netはログファイルを開きっぱなしにします。
ログを書くときだけロックするようにするには、アペンダの設定ファイルに
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
と書くといいらしいです。
が、タイミングによっては、これでもダメな場合もあります。

それ以外の一般の場合は、本当にちゃんと閉じているかチェックするとしか言いようがありません。

編集 削除
もげ  2008-12-15 14:54:41  No: 145491  IP: 192.*.*.*

そのときに、
他の誰か(自分が起動した他のプロセスも)が
ファイルを読んでいる/書いている可能性がある
ということはいつも考慮していたほうがよいでしょう。

自分勝手な都合で無茶するよりは、
たとえば、log4net側でログの切替を行って、
切り替え後に移動なり削除するなり...という処理も考えられるのでは?
http://dobon.net/cgi-bin/vbbbs/cbbs.cgi?mode=al2&namber=23405&no=0

編集 削除
PN  2008-12-25 01:20:25  No: 145492  IP: 192.*.*.*

返信が遅くなり、申し訳ありません。

>それならさん
    Dim sr As New StreamReader( _
        "readme.txt", Encoding.GetEncoding("Shift_JIS"))

    Dim text As String = sr.ReadToEnd()

    sr.Close()

のような使い方なので、Close忘れはありえないと思っています。


>aetosさん
教えていただいた方法で、とりあえず解決することができました。
タイミングによってはダメな場合もあるとのことですが、
今のところ、Exceptionは起こっていません。

ですが、本当に閉じているのかをチェックすることが
できるとのことなので、方法を探してみようと思います。


>もげさん
今回は自分のプログラムで作成したファイルを
同じプログラムでReadするというものだったので、
その辺に関しては全く考慮していませんでした。

aetosさんの方法ともげさんの方法、両方試してみて、
今回の状況により良い方を使おうと思います。

まずは、閉じているかどうかをチェックする方法を探してみます。
御三方ともありがとうございました。

編集 削除