DOBON.NET DOBON.NETプログラミング掲示板過去ログ

一時ファイルの削除

環境/言語:[Win2000Pro/C#/ver1.1]
分類:[.NET]

アプリケーションの終了時(Form1_Closed)に
一時的に作ったファイルを削除しようと思うのですが
別プロセスが使用中とのことでうまく削除できません。
一時ファイルの場所はテンポラリフォルダのtempdirというフォルダに入れてあります。

おそらくウィルス除去ソフトが邪魔をしていると思うのですが
いい削除方法はないでしょうか?
fukuです。

一時ファイルですが、ファイル形式は何ですか?
また、自身のAPで作成していると思うのですが、
削除前にファイルは閉じてますか?

>おそらくウィルス除去ソフトが邪魔をしていると思うのですが
>いい削除方法はないでしょうか?
非常に興味深いのですが、根拠はあるのですか、私も
参考にさせていただきたいです。

以上です。
■No3073に返信(fukuさんの記事)
> fukuです。
>
> 一時ファイルですが、ファイル形式は何ですか?
> また、自身のAPで作成していると思うのですが、
> 削除前にファイルは閉じてますか?
>
> >おそらくウィルス除去ソフトが邪魔をしていると思うのですが
> >いい削除方法はないでしょうか?
> 非常に興味深いのですが、根拠はあるのですか、私も
> 参考にさせていただきたいです。
>
> 以上です。
>
>

ウィルスソフトは関係ないと思いますよ。
ストリームで読み込んだファイルを閉じていない可能性が大です。
ファイルの種類はJPEG画像です。
pictureboxで画像を表示させているだけなのですが・・・
デバッグで表示される情報は
'System.IO.IOException' のハンドルされていない例外が mscorlib.dll で発生しました。
追加情報 : プロセスはファイル "exam.jpg" にアクセスできません。このファイルは別のプロセスが使用中です。
とのことです。
> ファイルの種類はJPEG画像です。
> pictureboxで画像を表示させているだけなのですが・・・

たぶんそれが原因でしょう。

PictureBox1.Image = Image.FromFile(そのファイルのパス)

のような感じで画像を読み込んでいませんか?もしそうなら、

PictureBox1.Image = Image.FromStream(New FileStream(そのファイルのパス))

のように変更しましょう。
前者のやり方だと指定したファイルをロックする仕様になっているためです。
■No3127に返信(よねKENさんの記事)
>>ファイルの種類はJPEG画像です。
>>pictureboxで画像を表示させているだけなのですが・・・
>
> たぶんそれが原因でしょう。
>
> PictureBox1.Image = Image.FromFile(そのファイルのパス)
>
> のような感じで画像を読み込んでいませんか?もしそうなら、
>
> PictureBox1.Image = Image.FromStream(New FileStream(そのファイルのパス))
>
> のように変更しましょう。
> 前者のやり方だと指定したファイルをロックする仕様になっているためです。
>

補足です。FileStreamクラスのコンストラクタでFileAccessパラメータがありますので、それをSharedにすればよかったとおもいます。
ありがとうございます

よねKEN さんの、方法で実現することができました。
具体的には
FileStream sr = new FileStream(ファイルパス,FileMode.Open);
pictureBox1.Image = Image.FromStream(sr);
sr.Close();
ということでできました。

ウィルスソフトが影響している等
無責任な発言申し訳ありませんでした。

DOBON.NET | プログラミング道 | プログラミング掲示板