5

私はpictureBoxでc#を使用して画像を表示します。次に、画像の名前を変更したいと思います。画像が別のプロセスで使用されていることがわかったため、できません。

この方法で画像を開きます

 Image image1 = Image.FromFile("IMAGE LOCATION"); ;
        pictureBox1.Image = image1; 

次に、この方法で名前を変更しようとすると、「別のプロセスによって使用されているため、プロセスはファイルにアクセスできません」というIO例外が発生します。

System.IO.File.Copy(@"OldName", @"NewName"); //copy changes name if paths are in the same folder

オブジェクトimage1は画像を保持していませんか?前のプロセスでファイルがまだロックされているのはなぜですか?任意の提案をいただければ幸いです。どうもありがとう!

4

5 に答える 5

11

この質問を見てください:新しいBitmap(filePath)によってロックされた空きファイル

ロックを解除するには、ビットのコピーを作成する必要があります。

Image img;
using (var bmpTemp = new Bitmap("image_file_path"))
{
     img = new Bitmap(bmpTemp);
}
于 2012-11-29T12:19:41.887 に答える
3

はい、そのようにディスク上のpicture boxロックファイルを制御します。IO

リンクされたファイルの名前を変更する場合は、次のことができます。

  • または破棄picture boxし、ファイルの名前を変更した(これがアプリに適している場合)

  • picture boxまたは、イメージのコピー/クローンに割り当てます。

于 2012-11-29T12:17:51.967 に答える
3

あなたはこれを試すことができます:

Image image1 = null;

using(FileStream stream = new FileStream("IMAGE LOCATION", FileMode.Open))
{
    image1 = Image.FromStream(stream);
}

pictureBox1.Image = image1

;

于 2012-11-29T12:24:57.090 に答える
2

画像を破棄する必要があります。

 Image image1 = Image.FromFile("IMAGE LOCATION"); ;
    pictureBox1.Image = image1;
 image1.Dispose();

移動します。

于 2015-02-14T01:08:36.183 に答える
0

この解決策は私の問題を解決しました。ピクチャーボックスを使用していて、中間イメージファイルなしでディスクから直接そのイメージをロードしていました。完了したとき、「picturebox.dispose」を実行していましたが、イメージファイルが解放されず、「vshostで使用されているファイル」のために削除できませんでした。画像変数を明示的に作成し(IE dim MyImage as image)、最初に画像を画像変数にロードし、次にMyImageを画像ボックスにロードする必要がありました。画像への参照を持つことで、MyImage.disposeを実行できます。これでvshostとイメージ間のリンクが閉じられ、プログラムで削除することができました。

于 2017-02-09T04:08:44.283 に答える