Top > プログラミング > .NET Tips> 表示中の画像ファイルが削除できない問題の解決法

表示中の画像ファイルが削除できない問題の解決法」への評価、コメント

評価

良い / 悪い = 66 / 3 (「良い」の割合 = 0.957 , 人気度 = 1.760

評価する

コメント一覧


評価の理由
匿名 2022/10/22 (Sat) 13:25:05
評価:良い
大変、助かりました。ありがとうございました。

通常のコメント
匿名 2021/09/7 (Tue) 13:58:42
単純に、元の状態に戻せばよいのでは?

using Microsoft.VisualBasic.FileIO; // ゴミ箱使用

namespace Test
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private Image imgSample = null;
private Image imgDefault = null;

private void Form1_Load(object sender, EventArgs e)
{
imgDefault = pictureBox1.Image; // 初期状態保持

imgSample = Image.FromFile("sample.jpg");
this.pictureBox1.Image = imgSample;
}

private void buttonGarbageBox_Click(object sender, EventArgs e)
{
pictureBox1.Image = imgDefault; // 初期状態復旧
imgSample.Dispose();

FileSystem.DeleteFile("sample.jpg", UIOption.OnlyErrorDialogs, RecycleOption.SendToRecycleBin); // ゴミ箱行き実行
}
}
}

通常のコメント
匿名 2021/09/5 (Sun) 09:28:53
この手法ダメです。指摘されてる方がいますがアニメーションgifを読み込んだ時点で表示不可になります。

評価の理由
あざ 2017/08/29 (Tue) 10:32:50
評価:良い
ハマりそうだったので助かりました

評価の理由
a13 2017/01/3 (Tue) 03:22:50
評価:悪い
画像オブジェクトがファイルをロックする理由はデコーダによって異なると思いますが、全般的な意味としては画像オブジェクトを生成したタイミングで読み出した情報以外に、後からファイルを読み込む可能性があるためです。
そのため、画像をすぐに使わなくなるならば、完全な解決策は FromStream を使うことではなく Image.Dispose() を呼び出すことです。(のはずです)

もし画像を継続的に使う場合、元にしたFileStreamだけを閉じてしまうと、後からファイルを読み込む必要が出た際にエラーが生じます。
一番遭遇しやすいのはマルチフレームを持つ画像ファイル(GIFやTIFFなど)を読み込んだ場合などでしょうか。
FileStreamを閉じてから Image.SelectActiveFrame() を呼ぶとか、アニメーションGIFなら PictureBox に画像を設定するとかした場合にエラーが生じます。
(つまり、この場合には必要なフレームをメモリ上の画像インスタンスにコピーしてファイルから読んだ方はDisposeするとか、ファイル内容をMemoryStreamにコピーしてそこからロードするとかの対処が必要になります。)

評価の理由
yama 2011/06/16 (Thu) 16:08:35
評価:良い
素人の手習いから始めて、こちらのサイトには大変お世話になっています。久しぶりに解決できず、へこみかけたのですが助かりました。

評価の理由
Try 2010/05/28 (Fri) 18:25:56
評価:良い
ずいぶん悩んでいましたが助かりました。やっぱ調べごとにはサイトが一番ですね
※ちなみに普通の表示でロックされてしまったファイルは
この方法でもう一度読み込めばロックは解除されるようです

評価の理由
太郎より 2009/06/8 (Mon) 12:58:52
評価:良い
ありがとうございます。できました。

評価の理由
MM 2009/03/15 (Sun) 22:35:35
評価:良い
助かりました。
これを解決しないと使いものにならないところでした。

評価の理由
ホリエ 2008/10/22 (Wed) 11:21:23
評価:良い
悩んでいましたので大変助かりました。
いつも、このサイトを利用させてもらっており、感謝してます。

.NET Frameworkのバージョンによる違い
イシカワ 2008/01/8 (Tue) 00:21:16
いつも参考にさせて頂いてます。
System.IO.FileStream を使用してアニメーションGiFファイルを読み込んだらストールしました。

評価の理由
神さま 2006/11/16 (Thu) 17:23:49
評価:良い
わたしも、ちょっと前まで、之に悩んでいました。
たいへん、良いアドバイスです。

評価の理由
metro 2006/09/20 (Wed) 15:58:28
評価:良い
死ぬほど助かりました。ヘルプでもよく分からず、検索一位でこのサイトを拝見し、解決できました。ありがとうございました。

評価の理由
MOTO 2006/02/6 (Mon) 11:36:57
評価:良い
VB6からVB.NETに移行しようと勉強中ですが、今まで意識せずできたことができないということが多く、とまどっています。
私のような.NET初心者にはこういうサイトは非常に助かります。

コメントの投稿

[説明]