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

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

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

あるフォルダ以下の指定したファイル名の存在チェック

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

■85751 / inTopicNo.1)  あるフォルダ以下の指定したファイル名の存在チェック
  
□投稿者/ maxi (1回)-(2017/11/20(Mon) 14:12:03)

分類:[C#] 

Windowsフォームの作成の一部なのですが、
スタートボタンを押すと、指定したフォルダ以下の頭3文字がaaaのファイルをすべて取得し、取得した結果をリストなりテキストボックスに表示させたいのですが、
選択したフォルダ配下にaaaのファイルが存在しない場合、存在しないというエラーメッセージを出したいのですが、
if文にどのように書けばよいのかわかりません。
Existsを使ってもうまくいかなくて。

回答お待ちしております

DirectoryInfo di = new DirectoryInfo(textBox.Text)のかっこ内のtextBox.Textには実際のフォルダパスが指定されている状態です。


private void btnStart_Click(object sender, EventArgs e)
{
DirectoryInfo di = new DirectoryInfo(textBox.Text);
files = di.GetFiles("aaa*", SearchOption.AllDirectories);

if()
{
MessageBox.Show("指定したフォルダ内に選択したファイルは存在しません");
}
引用返信 編集キー/
■85752 / inTopicNo.2)  Re[1]: あるフォルダ以下の指定したファイル名の存在チェック
□投稿者/ 魔界の仮面弁士 (1470回)-(2017/11/20(Mon) 14:47:28)
No85751 (maxi さん) に返信
> 選択したフォルダ配下にaaaのファイルが存在しない場合、存在しないというエラーメッセージを出したいのですが、

if ( !files.Any() )

もしくは

if ( files.Length == 0 )

とか。
引用返信 編集キー/
■85753 / inTopicNo.3)  Re[2]: あるフォルダ以下の指定したファイル名の存在チェック
□投稿者/ maxi (2回)-(2017/11/20(Mon) 15:42:55)
No85752 (魔界の仮面弁士 さん) に返信
> ■No85751 (maxi さん) に返信
>>選択したフォルダ配下にaaaのファイルが存在しない場合、存在しないというエラーメッセージを出したいのですが、
>
> if ( !files.Any() )
>
> もしくは
>
> if ( files.Length == 0 )
>
> とか。

No85752 (魔界の仮面弁士 さん) に返信
if(files.Length == 0)ではできませんでしたが、if ( !files.Any() )で存在チェックできました!ありがとうございます!
引用返信 編集キー/
■85754 / inTopicNo.4)  Re[3]: あるフォルダ以下の指定したファイル名の存在チェック
□投稿者/ maxi (3回)-(2017/11/20(Mon) 15:47:19)
No85753 (maxi さん) に返信
> ■No85752 (魔界の仮面弁士 さん) に返信
>>■No85751 (maxi さん) に返信
> >>選択したフォルダ配下にaaaのファイルが存在しない場合、存在しないというエラーメッセージを出したいのですが、
>>
>>if ( !files.Any() )
>>
>>もしくは
>>
>>if ( files.Length == 0 )
>>
>>とか。
>
> ■No85752 (魔界の仮面弁士 さん) に返信
> if(files.Length == 0)ではできませんでしたが、if ( !files.Any() )で存在チェックできました!ありがとうございます!
解決済み
引用返信 編集キー/
■85757 / inTopicNo.5)  Re[3]: あるフォルダ以下の指定したファイル名の存在チェック
□投稿者/ 魔界の仮面弁士 (1471回)-(2017/11/21(Tue) 11:01:12)
解決済みになっていますが、こちらから確認させて頂きたいことがあります。


No85753 (maxi さん) に返信
>>> DirectoryInfo di = new DirectoryInfo(textBox.Text);
>>> files = di.GetFiles("aaa*", SearchOption.AllDirectories);
>>> 存在しないというエラーメッセージを出したいのですが、
> if(files.Length == 0)ではできませんでしたが、

上記の「できませんでした」の状況について教えてください。

できなかった、というのはコンパイルエラーになったということでしょうか。
それとも、期待動作しなかったということなのでしょうか。


> if ( !files.Any() )で存在チェックできました!ありがとうございます!

EnumerateFiles メソッド(戻り値は IEnumerable<FileInfo> 型)を使っていたわけではなく、
GetFiles メソッド(戻り値は FileInfo[] 型)を使っておられるのですよね。

ファイル数が多い場合は、EnumerateFiles の方がパフォーマンスが良いと思います。
https://qiita.com/otagaisama-1/items/defebedf14b7e788751a
http://www.atmarkit.co.jp/fdotnet/dotnettips/1018enumfiles/enumfiles.html


それはさておき、今回の GetFiles の方ですが、配列というものは
必ず Length プロパティを持つはずですし、このメソッドが null を返すことも
無いと思っていたので、if(files.Length == 0) での該当無しチェックは
行えるだろうと認識していたので、何故「できなかった」のかが気にかかっています。


なお、SearchOption.AllDirectories 指定は、子孫ディレクトリーの中に
アクセス権の無いものが混じっていると、UnauthorizedAccessException 例外により
列挙処理が失敗しますのでご注意ください。
http://bbs.wankuma.com/index.cgi?mode=al2&namber=73194&KLOG=122
引用返信 編集キー/

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


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

このトピックに書きこむ