VB.NETの配列の限界を教えてください
- VB.NETで指定されたフォルダのファイルと、そのサブフォルダにあるファイルとフォルダの一覧を取得するロジックを組んでいます。
- サブフォルダはあればあるだけ取得していくように再帰的になっています。
- ファイルの数に制限があるかどうか、配列要素の最大数の限界やマシンのメモリの問題などが気になります。
- ベストアンサー
VB.NETの配列の限界を教えてください
VB.NETで 「指定されたフォルダのファイルと、そのサブフォルダにあるファイルとフォルダの一覧を取得する」というロジックを組んでいます。 サブフォルダはあればあるだけしたまで取得していくように再帰的になっています。 そのフォルダのファイルを取得するのに Dim s() as string s=System.IO.Directory.GetFiles("C:\") としているのですが、その時にファイルの数に制限がついてしまうのでしょうか? 例えば、配列要素数に限界があるとか、Directory.GetFiles自体の取得できる数に限界があるとか・・・ あるとすれば、配列要素の最大数の限界と、マシン自体のメモリの問題(?)が思いつくのですが。 ご存じの方がいらっしゃったら、お願いします。
- uc078
- お礼率92% (75/81)
- Visual Basic
- 回答数1
- ありがとう数2
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
配列に関しては、メモリや添え字に利用できる数値(32bit?64bit?PCが整数として扱える限界)の範囲までは使えると思いますよ。 http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfSystemIODirectoryClassGetFilesTopic.asp や http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/csspec/html/vclrfcsharpspec_12.asp を見る限りは・・ですけど・・ メモリに関しては、ガーベージコレクションになってるんでしたっけ?.Netは・・。 もし、取得できないような状況になたら、何らかのエラーが返されるはずですよね。バグや予期せぬエラーでなければ・・。
関連するQ&A
- VBでのファイル検索について。
VB.NET初心者です。 プログラム内でとある拡張子のファイルだけを検索してListViewに表示させたいのですが、プログラム自体の都合で、特定のディレクトリだけを検索する、という事ができません。 (そこの部分はまた別の話なので省略^^;) System.IO.Directory.GetFiles~という物を使って上記の様な設定は可能でしょうか? よくわからない文章ですが、よろしくお願いします。
- 締切済み
- Visual Basic
- マクロ Publicでの配列定義
Excelマクロで、Publicステートメントで配列を定義し、 プロシージャ内で配列要素を増やすことはできないのでしょうか? 下記ロジックで2つのMsbBoxが表示されるようにしたいです。 よろしくお願いします。 Public pubTMP Sub test() pubTMP(2,2)="aaa" test222 Msgbox pubTMP(2,2) Msgbox pubTMP(3,3) End Sub Sub test222() pubTMP(3,3)="bbb" End Sub
- ベストアンサー
- Visual Basic
- VB.net 引数で配列変数を渡す際の要素数
VB.net 2010 の質問です。 配列変数を他のプロシージャに引数で渡す際の、配列変数の要素数をあらかじめ宣言していないとエラーになります。 Dim Hairetsu() As String ' ←エラー Dim Hairetsu(100) As String ' ←正常 Public Sub aaa(ByRef Hairetsu() As String) Hairetsu(0) = "Test" '←正常の場合と、エラーの場合 End Sub Hairetsu(100) のように、要素数を宣言していると、エラーにならないのですが、 プログラム中、要素数がどこまで増加するか、分かりません。 Hairetsu()のように、要素数未確定の配列変数を渡すことは出来ないのでしょうか。 ご存知の方がいらっしゃいましたら、なにとぞアドバイスの程、よろしくお願いいたします。
- ベストアンサー
- Visual Basic
- フォルダ関連のライブラリについてアドバイスしてもらえないでしょうか?
フォルダ関連のライブラリについてアドバイスしてもらえないでしょうか? phpのフォルダ関連の操作がそのままだと少し面倒な感じがしたので 自分でライブラリのようなものを作りたいと思いました。 ------------------------------------------------------------------------------------------ calss My_Directory { const SIZE_FORMAT_B = 0; const SIZE_FORMAT_KB = 1; const SIZE_FORMAT_MB = 2; const SIZE_FORMAT_GB = 3; // フォルダへのパスを指定してオブジェクトを作成。 __construct($dir_path); // フォルダのサイズを取得。$recursiveがtrueで再帰的に全階層のファイルを調べる。 getSize($recursive = true, $sizeFormat = self::SIZE_FORMAT_B, $round = 2); // フォルダの削除。中に入っているファイルも削除される。 delete(); // フォルダに入っているファイル名を取得。$recursiveがtrueで再帰的に全階層のファイル名を取得。 // その場合、配列の配列形式にする。 getFileNames($recursive = true); } $path = 'C:\myfolder';// ローカル環境 $dir_obj = new My_Directory($path); echo $dir_obj->getSize(true, My_Directory::SIZE_FORMAT_MB, 1).'MB';// 例えば、「22.3MB」と表示される print_r($dir_obj->getFileNames()); /*例えば、 Array ( [0] => file_1 [1] => file_2 [2] => file_3 [sub_dir] => Array ( [0] => sub_dir_file_1 [1] => sub_dir_file_2 [sub_sub_dir] => Array ( [0] => sub_sub_dir_file_1 ) ) ) でも結局foreachのループで再帰的に調べることになるから、やっぱりめんどうだなぁ・・・ */ $dir_obj->delete();// myfolderが削除される ------------------------------------------------------------------------------------------ ただ、deleteした後にgetSizeとか実行した場合に、 例外を投げればいいのかなぁと考えたりしたのですが、 そもそもオブジェクトにして扱うこと自体が適切なのかどうか? だからフォルダ関連のライブラリがあまり存在しないのかなと思ったりしたのですが、 今回のようにライブラリを作ることに対してのアドバイス(自分ならこうするとか、ここはそんな風にやらないとか) など些細なこともでいいので教えてもらいたいです。
- ベストアンサー
- PHP
- フルパスからファイル名取得の方法
指定したフォルダのフルパスを「bmpFiles」に入れているのですが、表示する時はファイル名のみの表示にしたくて「Path.GetFileName」を使用してファイル名を取得しようとしたのですが、「型'stringの1次元配列'の値を'string'に変換できません」というエラーが出てしまいます。 VBを始めたばかりでよく分からないのでアドバイスをお願いします。 Dim imageDir As String = fbd.SelectedPath ' 指定フォルダまでのディレクトリ Dim bmpFiles As String() = _ System.IO.Directory.GetFiles(imageDir, "*.bmp") 'フルパス Dim bmpFileName As String = _ Path.GetFileName(bmpFiles) ←bmpFilesで上記エラー
- ベストアンサー
- Visual Basic
- フォルダの中の特定のファイルを取得
(VB.NET) Dim files As String() = System.IO.Directory.GetFiles("C:\aaa", "*", System.IO.SearchOption.AllDirectories) ListBox1.Items.AddRange(files) 上記のコードでは"C:\aaa"以下のすべてのファイルを取得しますが、 例えばGetFilesメソッドの2番目のパラメータに "*.(html|htm)"などと指定して(この場合は無理でしたが)"C:\aaa"以下の拡張子が「html」または「htm」のファイルを取得するにはどうすればよいでしょうか。 "*.html"のように1種類の場合はできるのですが…。
- ベストアンサー
- Visual Basic
- C# 2010 アプリケーションの完全なるアンインストール方法?
C# 2010 アプリケーションの完全なるアンインストール方法? MyPackageフォルダに数ケのアプリケーションプログラムを入れました うち1ケはアンインストールのプログラムであり、下記のような処理が記述されています foreach (string file in System.IO.Directory.GetFiles(@"c:\MyPackage", "*.*")) { System.IO.File.Delete(file); } ----------------(1) System.IO.Directory.Delete(@"c:\MyPackage"); ------(2) アンインストールの為にこのプログラムを実行すると、フォルダの中に入っている自分自身を削除しようとしますから(1)でエラーとなります また(2)のところで自分自身が入っているフォルダを削除しようとしますから、やはりエラーになります 結局フォルダとアンインストールプログラムが残ってしまいます 一般的なアンインストールプログラムではこの問題をどのようにして解決しているのでしょうか?
- ベストアンサー
- C・C++・C#
- ファイルの一覧を取得して配列に入れるには(VB2005)
VisualBasic2005でプログラミングの勉強を始めましたが、配列のところで躓いてしまいました。 現在やりたいことは、ListBoxとDataGridViewにそれぞれ取得したファイルのファイル名を一覧を表示し、項目クリックでそのファイルを開くことです。(DataGridViewのほうは、ファイルの一覧だけでなく、項目を分けてパスやファイルサイズなども表示させたいと思います)。 まずListBoxのほうですが、検索して次のような方法が見つかりました。 ListBox1.DataSource = _ My.Computer.FileSystem.GetFiles("パス",FileIO.SearchOption.SearchTopLevelOnly,"*.拡張子") そのままコピーして利用してみたのですが、直接リストボックスに一覧を取得し、パスも含めた文字列が表示されてしまいました。リストボックスにはパスと拡張子を除いたファイル名だけを一覧表示したいです。それで、各文字列を操作するためにはまず取得したファイル一覧を配列かコレクションに格納しなければならないと思うのですが、この方法がどうしてもわかりません(また、配列とコレクションではどちらが相応しいでしょうか)。 また、DataGridViewでもパスやサイズも含めた一覧を表示し、同様にクリックで開けるようにしたいと思います。この場合も、まず多次元配列に検索結果を入れると思うのですが、データを入れた配列から、DataGridViewに表示させる方法も合わせて教えていただきたく思います。 以上のことについて、アドバイスまたは方法をご教授ください<(_ _)> 検索していると、 DataGridView1.datasource = DataTable ListBox1.datasource = ~~~ などという例が多いのですが、DataTableやdatasourceと配列はどのような関係にあるのでしょうか?DataTableのデータを配列に入れたり、またその逆だったりは簡単に出来ないものでしょうか。 このあたりがどうも理解不足で、応用力もつけたいので、どのあたりを勉強すればよいのかも教えて頂けると助かります。初心者用の参考書と、逆引き大全500は一通り読んでみました。
- 締切済み
- Visual Basic
お礼
お返事送れて申し訳有りあません。 .NET、一応はガーベージコレクションをやってくれるようですが・・・イマイチ信用しきれてません(^^; とりあえず5万3千くらいのファイルは取り扱ってくれました。これ以上は怖くてテストしていません。