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

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

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

画像ファイルを変更


(過去ログ 8 を表示中)

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

■7954 / inTopicNo.1)  画像ファイルを変更
  
□投稿者/ caman 二等兵(3回)-(2006/10/31(Tue) 16:38:02)

分類:[C#] 


分類:[C#] 

.NetFramework2.0

pictureBoxで使用されている画像AをBにコピーします。
AとBは名前が異なります。
File.Copy(A,B,true);

この直後にpictureBoxで使用する画像を画像Bに変更したいのですが
どのようにすればよろしいでしょうか。
知恵をお貸しください。

File.Delete(A); ←ここでもちろんエラー
最後に画像Aを削除したいです。

0
引用返信 編集キー/
■7957 / inTopicNo.2)  Re[1]: 画像ファイルを変更
□投稿者/ まきなす 二等兵(9回)-(2006/10/31(Tue) 17:37:25)

分類:[C#] 

もう少し実際に記述されたソースを書いたほうがよいかと思います。
これだけではコメントしづらいです。

0
引用返信 編集キー/
■7958 / inTopicNo.3)  Re[2]: 画像ファイルを変更
□投稿者/ ダッチ 軍曹(65回)-(2006/10/31(Tue) 17:46:53)

分類:[C#] 

> この直後にpictureBoxで使用する画像を画像Bに変更したいのですが
> どのようにすればよろしいでしょうか。
> 知恵をお貸しください。

画像B のパスはわかっていると思いますのでそれを指定して
PictureBox に設定すると表示できます。

PictureBox に画像を表示する
http://jeanne.wankuma.com/tips/image/picturebox.html
こちらを参考にしてみてください。

> File.Delete(A); ←ここでもちろんエラー
> 最後に画像Aを削除したいです。
なぜもちろんエラーなのでしょうか。
エラーといったいどういったエラーなのでしょうか。

上記のサイトで説明されているように Stream を使用すると
削除時にエラー(例外)が発生しなくなると思います。

0
引用返信 編集キー/
■7977 / inTopicNo.4)  Re[3]: 画像ファイルを変更
□投稿者/ caman 二等兵(4回)-(2006/11/01(Wed) 09:26:13)

分類:[C#] 

まきなすさん、ダッチさん返答ありがとうございます。

> なぜもちろんエラーなのでしょうか。
> エラーといったいどういったエラーなのでしょうか。

別のプロセスで使用されているからファイルにアクセスできないって
いうエラーです。

> 上記のサイトで説明されているように Stream を使用すると
> 削除時にエラー(例外)が発生しなくなると思います。
//AをBにコピーする
File.Copy(A, B, true);

//古い画像ファイルを閉じる
FileStream a = new FileStream(A, FileMode.Open);←実行時エラー
a.Close();

//新しいファイルをイメージに表示する
FileStream b = new FileStream(B, FileMode.Open);
this.pictureBox.Image = Image.FromStream(b);
//古い画像ファイル削除
File.Delete(A);

ダッチさんに教えて頂いた通り順をおってやってみました。
しかしファイルをオープンしようとすると上に書いたように同じエラーが発生して
しまいます。
コードが間違っているのでしょうか。ご指摘お願いします。

0
引用返信 編集キー/
■7979 / inTopicNo.5)  Re[4]: 画像ファイルを変更
□投稿者/ ダッチ 軍曹(67回)-(2006/11/01(Wed) 10:10:24)

分類:[C#] 

No7977に返信(camanさんの記事)
> まきなすさん、ダッチさん返答ありがとうございます。
>
>>なぜもちろんエラーなのでしょうか。
>>エラーといったいどういったエラーなのでしょうか。
>
> 別のプロセスで使用されているからファイルにアクセスできないって
> いうエラーです。

別プロセスが使用中であれば削除出来ません。
今作成中にアプリケーションが使用中であれば Stream を使用すると削除できます。

> ダッチさんに教えて頂いた通り順をおってやってみました。
> しかしファイルをオープンしようとすると上に書いたように同じエラーが発生して
> しまいます。
> コードが間違っているのでしょうか。ご指摘お願いします。

画像B の表示しているやり方を、画像A にも行ってください。
そうすれば画像A を削除することが出来ます。

それと画像B のファイルを表示するときに Stream を Close するのが抜けています。
//新しいファイルをイメージに表示する
FileStream b = new FileStream(B, FileMode.Open);
this.pictureBox.Image = Image.FromStream(b);
b.Close();


0
引用返信 編集キー/
■7980 / inTopicNo.6)  Re[5]: 画像ファイルを変更
□投稿者/ まきなす 二等兵(10回)-(2006/11/01(Wed) 10:20:18)

分類:[C#] 

camanさん

No.7977のソースコードをそのまま実行してみました。
ロックエラーは出ませんね。
オープンの実行時エラーも出ません。
また、エラーの起きている場所からして別の問題ではないでしょうか?
一度成功して削除されてしまったファイルをオープンしようとしているとか。

それとこのサンプルソースでは A がpictureBoxに割り当てられていないので
そもそもエラーは出ませんね。
どこかに

this.pictureBox.Image = Image.FromStream(a);

がないとテストにならないですね。


ダッチさん

イメージのファイルロック回避はFromStreamでやればいいんですね。
知りませんでした。
勉強になりました。
一度イメージのコピー(ファイルではない)を作成して対処していました。
ありがとうございました。



0
引用返信 編集キー/
■7981 / inTopicNo.7)  Re[5]: 画像ファイルを変更
□投稿者/ ダッチ 軍曹(68回)-(2006/11/01(Wed) 10:20:29)

分類:[C#] 

追加:
ファイルでも何でもそうですが、開いたものは閉じないと削除や編集など行えません。そこに注意すれば、出来ると思います。

0
引用返信 編集キー/
■7982 / inTopicNo.8)  Re[6]: 画像ファイルを変更
□投稿者/ caman 二等兵(6回)-(2006/11/01(Wed) 11:04:25)

分類:[C#] 

まきなすさん、ダッチさん度々ありがとうございます。
大変わかりやすい説明で助かります。

まきなすさん

> サンプルソースでは A がpictureBoxに割り当てられていないので
> そもそもエラーは出ませんね。
> どこかに
> this.pictureBox.Image = Image.FromStream(a);
> がないとテストにならないですね。

これはダッチさんおっしゃった

画像B の表示しているやり方を、画像A にも行ってください。
そうすれば画像A を削除することが出来ます。

こういうことですよね。これを受けまして私の意見を聞いてください。

まきなすさん、ダッチさん

>画像A がpictureBoxに割り当てられていないので

このことなんですが元々アプリケーションのpictureBoxで画像Aが使われている
状態なんで
     this.pictureBox.Image = Image.FromStream(a);
これを実装してしまうと、「pictureBoxにはなにも割り当てられていない状態で、この時点でaを割り当てた」という感じがするので省きました。No7954で記述したのが説明不足ですいません。

ダッチさん

>別プロセスが使用中であれば削除出来ません。
>今作成中にアプリケーションが使用中であれば Stream を使用すると削除
>できます。

私は後者のつもりでしたが、まきなすさんが言われた通りなにか別の問題があるからエラーが発生するのかもしれません。デバッグ処理をしながら考えてみようかと
思います。

勉強になりました。まきなすさんダッチさんありがとうございます。
またなにかお気づきな点がありましたらご指摘よろしくお願いします。


0
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -