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

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

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

ファイルを日付順に読込む

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

■96112 / inTopicNo.1)  ファイルを日付順に読込む
  
□投稿者/ テル (1回)-(2020/10/22(Thu) 07:43:46)

分類:[VB.NET/VB2005 以降] 

vb でPictureBox1.Imageを使ってJPGファイルを日付と時間の古い順で
ボタンを押すと開いていくプログラムを作りたいのですがどうすればよいでしょうか?
フィル名は日付と時間で名前がついています。
引用返信 編集キー/
■96114 / inTopicNo.2)  Re[1]: ファイルを日付順に読込む
□投稿者/ kiku (202回)-(2020/10/22(Thu) 09:05:29)
No96112 (テル さん) に返信
> vb でPictureBox1.Imageを使ってJPGファイルを日付と時間の古い順で
> ボタンを押すと開いていくプログラムを作りたいのですがどうすればよいでしょうか?
> フィル名は日付と時間で名前がついています。

VBは苦手なので、流れだけ記述します。
下記のような手順で実装してみてはどうでしょうか?

●初期化
1.ある固定フォルダ内のすべてのファイル名を取得
2.そのファイル名の内、例えば下記のフォーマットのみに絞り込む
  画像_20201022_085233.jpg
3.絞り込んだファイル名を古い順番に並び替え、そのリストを保持する。
4.リストが1件以上存在すれば、インデックス=0とする。
  0件ならば、インデックス=−1とする。

●ボタンを押下したとき
5.インデックス<0ならば、何も表示しない。
6.インデックス>=0ならば、リストからインデックス番号のファイル名を取得し、画面表示。
7.インデックスを+1する。
8.インデックスがリストの最大数を越えていたらインデックス=−1とする。

引用返信 編集キー/
■96115 / inTopicNo.3)  Re[1]: ファイルを日付順に読込む
□投稿者/ 魔界の仮面弁士 (2883回)-(2020/10/22(Thu) 09:05:41)
2020/10/22(Thu) 09:10:05 編集(投稿者)

No96112 (テル さん) に返信
> vb でPictureBox1.Imageを使ってJPGファイルを日付と時間の古い順で
> ボタンを押すと開いていくプログラムを作りたいのですがどうすればよいでしょうか?
> フィル名は日付と時間で名前がついています。

やりたいことは分かりましたが、知りたいのはどの部分なのでしょうか?


(1) フォルダー内の JPG ファイルを列挙する方法が分からない。
 → System.IO.Directory クラスの GetFiles メソッド もしくは
   System.IO.DirectoryInfo クラスの GetFiles メソッドを使えます。

(2) 列挙されたファイル名の日付部と時間部を切り出す方法が知りたい。
 → 名付けルールが明示されていないので答えられませんが、
   フルパスからファイル名部分を切り出したいのであれば、
   System.IO.Path クラスの GetFileNameWithoutExtension メソッドが使えます。

(3) ファイルの最終更新日や作成日時を得たい。
 → System.IO.File クラスの GetLastWriteTime / GetCreationTime メソッド もしくは
   System.IO.FileInfo クラスの LastWriteTime / CreationTime プロパティを使えます。

(4) 列挙された情報を並び替える方法を調べている。
 → OrderBy 拡張メソッド や Order By クエリ式を使えます。
   String の一次元配列が対象なら、Array クラスの Sort プロパティが使える事もあります。

(5) 順番に得られたファイルを PictureBox に表示する方法が分からない。
 → PictureBox の ImageLocation プロパティを使う方法や、Load / LoadAsync メソッドを
   用いる方法などがあります。あるいは Image.FromStream や Image.FromFile メソッドから
   得られた Image を、PictureBox の Image プロパティにセットする方法も使えます。
   https://dobon.net/vb/dotnet/graphics/pictureboximage.html

(6) 単一画像の表示ならできるが、ボタンを押すごとに次の画像を読み取るとか、
 もしくは数秒間隔などで自動的に次の画像に切り替える方法が分からない。
 → Integer 型のフィールド変数もしくは Static 変数を用意して、
   Click イベントでその値を +1 していけば、ボタンを押した回数を
   得られるので、それを使って n 番目に列挙された画像を扱うとか…。
 → 一定時間で自動切換えたいような場合には、
   Timer を Form に貼って使うと良いでしょう。

(7) 使うべきメソッドが分からないのではなく、コンパイルエラーや実行時エラーなどで悩んでいる。
 → 現状の問題点を明確に示してみてください。
引用返信 編集キー/
■96122 / inTopicNo.4)  Re[2]: ファイルを日付順に読込む
□投稿者/ テル (2回)-(2020/10/22(Thu) 12:28:57)
通常は、'PictureBox1に"C:\test.bmp"を表示する
PictureBox1.Image = System.Drawing.Image.FromFile("C:\test.bmp")
こうすると表示がされると思うのですが("C:\test.bmp")ここの部分を
どうすればボタンを押すごとに日付順に表示するのかがわかりません。
色々とプロパティの説明がありますがどうやって使うとこうなるのか
もわかりません。
引用返信 編集キー/
■96123 / inTopicNo.5)  Re[3]: ファイルを日付順に読込む
□投稿者/ 774RR (838回)-(2020/10/22(Thu) 14:25:28)
String fn = @"C:\test.tmp";
System.Drawing.Image.FromFile(fn);
が問題ないの、理解できるよね

String[] files = Directory.GetFiles(path); としておいて
System.Drawing.Image.FromFile(files[n]); も妥当なのわかるよね

ならば
事前に GetFiles() してファイル名順にソートした結果を保持しておき n を初期化
ボタンを押したときに n を増やして FromFile() する
のもできるよね

引用返信 編集キー/
■96124 / inTopicNo.6)  Re[4]: ファイルを日付順に読込む
□投稿者/ 魔界の仮面弁士 (2884回)-(2020/10/22(Thu) 14:37:55)
No96122 (テル さん) に返信
> 通常は、'PictureBox1に"C:\test.bmp"を表示する

あれ?
No96112 では JPG と言っていたのに、
No96122 では bmp になっていますね。



No96123 (774RR さん) に返信
> が問題ないの、理解できるよね

念のため、774RR さんの投稿を Visual Basic の文法に補正しておきます。


> String fn = @"C:\test.tmp";
> System.Drawing.Image.FromFile(fn);

' Dim fn As String = "C:\test.bmp"
Dim fn As String = "C:\test.jpg"
Dim img As Image = System.Drawing.Image.FromFile(fn)

※実際には C: 直下に配置するのではなく、画像用のディレクトリを用意しておいた方が無難です。


> String[] files = Directory.GetFiles(path); としておいて
> System.Drawing.Image.FromFile(files[n]); も妥当なのわかるよね

Dim sPath As String = "C:\"
Dim sFiles As String() = System.IO.Directory.GetFiles(sPath, "*.jpg")
Dim n As Integer = 0
Dim sFile As String = sFiles(n) ' n の値は、0 以上 sFiles.Length 未満にします
Dim img As Image = System.Drawing.Image.FromFile(sFile)
引用返信 編集キー/
■96157 / inTopicNo.7)  Re[5]: ファイルを日付順に読込む
□投稿者/ テル (3回)-(2020/10/23(Fri) 22:00:57)
Dim sPath As String = "C:\"
Dim sFiles As String() = System.IO.Directory.GetFiles(sPath, "*.jpg")
Dim n As Integer = 0
Dim sFile As String = sFiles(n) ' n の値は、0 以上 sFiles.Length 未満にします
Dim img As Image = System.Drawing.Image.FromFile(sFile)
↑以外あまり意味が理解できなかったのでわかりませんでした
部分的ですが理解できたので作ることができました。
ありがとうございます
解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


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

このトピックに書きこむ