Top > プログラミング > .NET Tips> あるフォルダ以下にあるファイルをすべて取得する

あるフォルダ以下にあるファイルをすべて取得する」への評価、コメント

評価

良い / 悪い = 145 / 11 (「良い」の割合 = 0.929 , 人気度 = 2.037

評価する

コメント一覧


通常のコメント
匿名 2022/06/13 (Mon) 09:50:53
このGetFiles()、取得されるファイルパスの並び順序が全く頓着されません。
そうかといって、List<string>を定義しその中に取得したファイルパスを放り込み、Sort()をかけると、当然というか単純に昇降順にする為今度はディレクトリ階層構造を無視したソートがかかります。

なかなかのクズっぷりです(草

で、きちんとソートをかけてサブディレクトリまで含めた全ファイルを列挙しようと欲するならば、1階層づつ分離し都度そのサブディレクトリ内のファイルを取得し、ソート、といったコードを、結局自力実装するしかないようです orz

いや、記録メディア上の記録方法が分かっていればこうなるのは確かに理解できるのですが、普段GUI上でソート済みのフォルダウィンドウを見慣れていてこの動作を期待しちゃってる身としては、なんだコレは?! こんなもの使いモノになるか!! と思ってしまいませんかねぇw

参考までに。

評価の理由
x86 2021/12/8 (Wed) 18:22:29
評価:良い
参考になりました!

通常のコメント
e 2021/11/3 (Wed) 20:15:22
C#フォームアプリ.NETframework4.6.1のプロジェクト内で、リムーバブルドライブ内のファイルを検索すると「System.IO.Directory.EnumerateFiles」でも「GetFiles」でも結果が
F:\folder\......
とならず
F:folder\......
となり最初の「\」がとれてしまいます。

コンソールアプリで実行すると上記のような問題は起きません。
原因がわからず困っています。

通常のコメント
直之介 2020/07/17 (Fri) 12:36:17
Directory.EnumerateFiles でファイル名の取得を行った後に、MessageBoxOptions.DefaultDesktopOnlyオプションをつけたメッセージボックスが表示されなくなるので注意が必要です。
これの解決で、1日潰してしまいました(ToT)。

System.Windows.Forms.MessageBox.Show("Test", "Test", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error, System.Windows.Forms.MessageBoxDefaultButton.Button1, System.Windows.Forms.MessageBoxOptions.DefaultDesktopOnly);
//IEnumerable<string> files = Directory.EnumerateFiles(strTmp, "*.csv");
string[] files = Directory.GetFiles(strTmp, "*.csv"); //これならOK

System.Windows.Forms.MessageBox.Show("Test2", "Test", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error, System.Windows.Forms.MessageBoxDefaultButton.Button1, System.Windows.Forms.MessageBoxOptions.DefaultDesktopOnly); //Directory.EnumerateFilesを使用すると表示されない

評価の理由
匿名 2020/05/15 (Fri) 09:20:40
評価:良い
参考になりました。
いつも助かっています。

通常のコメント
匿名 2017/11/15 (Wed) 15:45:33
ヴァージョン名取得と併せて大変助かりました。
ありがとうございます!

通常のコメント
匿名 2016/11/25 (Fri) 09:47:08
参考になりました

通常のコメント
けんけん 2016/09/26 (Mon) 22:43:59
アクセスが許可されていないフォルダにアクセスするときにエラーが出ます。そのフォルダを飛ばしたいのですが、どのようにしたらよろしいでしょうか?

下記コメントを読みましたが、申し訳ありません、
理解できておりません。具体的な方法を教えていただけますでしょうか?

例外処理をどのようにしたらよいのでしょうか?
よろしくお願いいたします。

通常のコメント
匿名で 2013/09/29 (Sun) 00:31:52
おっしゃられる通り
例外処理を入れる事で回避できました。
早々の回答ありがとうございました。

>> c:\
>> とかのドライブを指定すると
>> エラーとなりますが、
>> その回避はどうすれば良いでしょうか

通常のコメント
管理人 2013/09/23 (Mon) 23:51:18
> c:\
> とかのドライブを指定すると
> エラーとなりますが、
> その回避はどうすれば良いでしょうか

どのようなエラーなのか分かりませんので何とも言えませんが、ドライブの準備ができていなかったり、アクセスが許可されていないファイルにアクセスしようとしたなどの理由でエラーが発生する可能性があります。これを回避するには、例えばSearchOption.AllDirectoriesを使わない方法で、Directory.GetFilesやDirectory.GetDirectoriesが例外をスローした時にそのフォルダを飛ばすなどの方法が考えられます。

通常のコメント
匿名で 2013/09/23 (Mon) 21:33:45
c:\
とかのドライブを指定すると
エラーとなりますが、
その回避はどうすれば良いでしょうか

評価の理由
Kawi 2011/03/11 (Fri) 10:55:26
評価:良い
ちょうど探してた所でした
昔やったのにやり方を忘れてさがしてました。

評価の理由
百田龍介 2011/01/30 (Sun) 15:40:12
評価:良い
とても便利。

評価の理由
ともくぼ 2010/12/17 (Fri) 14:51:03
評価:良い
いつもとっても助かっています。ありがとうございます。

通常のコメント
匿名 2010/01/12 (Tue) 13:35:34
共有フォルダ等で、アクセスユーザ・パスワードを指定する場合はどうすればよいのでしょうか?

通常のコメント
MM 2009/07/10 (Fri) 17:59:14
C:\などのドライブルートで行うとSystem Volume Informationのチェックをしようとしてエラーになってしまいますね。

評価の理由
匿名 2009/05/11 (Mon) 15:27:52
評価:良い
ちょうど探して内容が見つかり。おかげで助かりました。

評価の理由
まんば 2009/05/7 (Thu) 20:05:03
評価:良い
まだ初心者なので、非常に役に立ちました。

評価の理由
Keiko 2008/11/15 (Sat) 14:32:03
評価:良い
参考になりました。

通常のコメント
ぞう 2008/09/17 (Wed) 17:20:12
DirectoryInfo.GetFiles メソッド 注意点
ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.NETDEVFX.v20.ja/cpref8/html/M_System_IO_DirectoryInfo_GetFiles_1_1969a478.htm
より
末尾にアスタリスク (*) を付けた検索パターンではすべての拡張子と一致しますが、疑問符を使用する検索パターンではワイルドカードは使用されません。たとえば、ディレクトリ内に file1.txt と file1.txtother という 2 つのファイルが存在する場合、"file?.txt" という検索パターンでは 1 つ目のファイルのみが返されますが、"file*.txt" の検索パターンでは両方のファイルが返されます。

評価の理由
ディ・ディ 2004/08/21 (Sat) 19:12:44
評価:良い
分からないとき、参考になりました。

コメントの投稿

[説明]