🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

3回答

787閲覧

[例外処理]無効なアドレスをスルーしたい

hanbee.com

総合スコア52

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

0クリップ

投稿2021/01/10 03:19

お世話になっております。
以前に作成したWindowsFormApplicationで例外処理を追加したいのですが、
やり方が分からず困っています。
DBから画像パス(アドレス)を持ってきて、そのアドレスから画像を開くという風に
プログラムを作っているのですが、仮にそのパスが変わったり、画像のファイル名が変わったりしたときには
エラーとなって動かなくなってしまいます。
そういうときに対応するために、DBから画像のパスを持ってきて、そのパスに画像がないことが
わかったら、デフォルトで用意した「画像がないですよ。」というような画像を表示するようにして、
エラーとなることを回避したいです。
この存在しないファイルパスを検出する方法というのはプログラムで記述することはできるものなのでしょうか?
この例外処理に困っています。どうかお力を貸していただけないでしょうか。宜しくお願い致します。

ソースコードは以下です。

vb.net

1 2Public Class application 3 '配列のフィールドを作成 4 Private bihin(,) As System.Windows.Forms.PictureBox 5Private Sub form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 6 Dim fs As FileStream 7 Dim img As Image 8 Dim adress(3, 7) As String 9 Me.bihin = New System.Windows.Forms.PictureBox(3, 7) {} 10 11 For i As Integer = 0 To 3 12 For j As Integer = 0 To 7 13 '生成 14 Me.bihin(i, j) = New System.Windows.Forms.PictureBox() 15 16 'DBからファイルパスを取得 17           adress(i, j) = command.ExecuteScalar() 18 fs = File.OpenRead(adress(i,j)) 19 img = Image.FromStream(fs, False, False) 20 bihin(i, j).Image = img 21 me.Controls.Add(bihin(i, j)) 22 Next 23 Next 24End Sub

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

vb net file existsでググってみてください。

投稿2021/01/10 04:41

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hanbee.com

2021/01/10 09:24

ありがとうございます。その関数を使って実現できました。
guest

0

ベストアンサー

質問からは例外処理についてどこまで判っているか、調査したかが不明です。
最低限、公式のドキュメントは読んでいるという前提でよろしいでしょうか?
Try...Catch...Finally ステートメント (Visual Basic)

キャッチした例外が FileNotFoundException であれば、FileNameプロパティからファイルパスが取得可能です。

dobon.netにも詳細な記事があるので、読んでください。
("VB.NET 例外処理" でググったらすぐ出てくる記事なので、質問する前に調べて欲しい…)
エラー処理(例外処理)の基本

投稿2021/01/10 04:28

編集2021/01/10 05:00
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hanbee.com

2021/01/10 04:34

ありがとうございます。 その関数を使って、想定通り動作するかを確かめようと思います。
hanbee.com

2021/01/10 09:24

実現できました。 ちょっと調査が甘かったです。よく探せばちゃんと出てくる内容でした。 Try...Catch...Finally??についてもいずれ勉強したいと思います。
退会済みユーザー

退会済みユーザー

2021/01/10 13:18

いずれ、ではなく例外処理は必須知識なのできちんと学習してください。
guest

0

例外処理で、「画像がないですよ。」というような画像を表示してもとに戻るようにコードを書きましょう

投稿2021/01/10 03:29

編集2021/01/10 03:30
y_waiwai

総合スコア88038

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hanbee.com

2021/01/10 03:42

回答ありがとうございます。私はファイルパスが存在しないなら存在しないで、とりあえずデフォルトの画像に置き換えておいて、ユーザーにファイルパスが間違っていることを知らせておいた上で、通常動作を行えるようになってほしいのです。なので、もとに戻るという動作にはするつもりはありません。
y_waiwai

2021/01/10 03:47

ああ、それなら、そのあなたの思うようになるようなコードを書けばいいですね。 それを行う上で、わからないことがあるならお答えできるかと思います。 まあ、そもそもの話になりますが、そのファイルパスが存在するか否か、ってのは簡単に判定できるもんなんで、それで判定して処理を分ければいいかと思います
退会済みユーザー

退会済みユーザー

2021/01/10 04:36

存在チェックをした直後にファイルが移動されている、というのは全く有りえない事ではないので、いずれにしても例外処理は入れておく必要があります。
hanbee.com

2021/01/10 09:22

If System.IO.File.Exists(fileName) Then End If 上を使って例外処理を入れることができました。 ありがとうございました。
退会済みユーザー

退会済みユーザー

2021/01/10 13:15

ファイルの存在チェックと例外処理は別の問題ですが… 曖昧な知識のまま先に進まずに、きちんと足場を固めた方がいいですよ
hanbee.com

2021/01/10 13:37

今回の問題については実現したいことが実現できたのでOKとしていますが、 察するにファイルの存在チェック=例外処理ではないのですね。 引っかかるのは、存在チェックをした直後にファイルが移動されている?というのはあり得ないと思ってしまいます。ローカルのピクチャーフォルダの画像ファイルがものの0.001秒のうちに変わるなんてことがありえるのでしょうか?
y_waiwai

2021/01/10 13:41

まあ、存在チェックをした直後にファイルが移動されているってこともありますし、 そのファイルが壊れていたり、読み出しエラーになってたり、と、存在してもエラーになることもあるので、例外処理はきちんとしておきましょう。
退会済みユーザー

退会済みユーザー

2021/01/10 13:48 編集

ローカルというのが後付けの情報なので、そういうのは最初に書いておいてください。DBから画像のパスを取得云々と書いてあったので、マルチユーザー環境を想定していました。可能性的に有りえないので、とりあえず対策は不要と判断したのであれば、それはそれでまあいいと思いますが、基本的には例外処理は入れるものです。想定できないタイミングで発生するエラーを捉えるためのものなので、例外処理なのです。
hanbee.com

2021/01/10 14:25

なるほど。提示していただいたdobon.netさんのエラー処理の基本を読みました。 Try...Catchを行うことで、ユーザーにエラーを知らせることができるということで納得です。 いまは無効なファイルパスだった場合、デフォルトの画像を掲示する処理を行いますが、 file.Existsではスロー出来ない例外のためにも、 Catch ex As System.Exception として処理を記述するべきなのかなと思いました。 ありがとうございます。情報が後付けで失礼致しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問