- PR -

ディレクトリに含まれるファイルのリスト

1
投稿者投稿内容
autumn
大ベテラン
会議室デビュー日: 2001/07/27
投稿数: 215
投稿日時: 2002-01-14 17:51
 うっかり
コード:
string [] list = Directory.GetFiles("c:\\*.*");


 と書いたらIllegal characters found in input. Security checks can not contain wild card characters.と怒られてしまいました。
 で調べてみると、DirectoryのGetFilesと、DirectoryInfoのGetFilesは機能も挙動もまるで違っていて、混同するとトラブルの元ということに気付きました。

 正しい例その1
コード:
string [] list = Directory.GetFiles("c:\\");
foreach( string item in list ) 
{
	Console.WriteLine(item);
}



 正しい例その2
コード:
DirectoryInfo info = new DirectoryInfo("c:\\");
FileInfo [] list = info.GetFiles("*.*");
foreach( FileInfo item in list ) 
{
	Console.WriteLine(item.FullName);
}



 正しくない例
コード:
string [] list = Directory.GetFiles("c:\\*.*");
foreach( string item in list ) 
{
	Console.WriteLine(item);
}



 正しくない理由は簡単です。DirectoryクラスのGetFilesは、指定ディレクトリに含まれるファイル一覧を取得するので、ワイルドカードを含める必要はないということです。ワイルドカードを使いたい場合は、DirectoryInfoクラスのGetFilesを使う必要があるようです。

_________________
NothingBut.NETFX
大ベテラン
会議室デビュー日: 2001/09/13
投稿数: 102
投稿日時: 2002-01-15 15:52
引用:

autumnさんの書き込み (2002-01-14 17:51) より:
 正しくない理由は簡単です。DirectoryクラスのGetFilesは、指定ディレクトリに含まれるファイル一覧を取得するので、ワイルドカードを含める必要はないということです。ワイルドカードを使いたい場合は、DirectoryInfoクラスのGetFilesを使う必要があるようです。



ご指摘のワイルドカードは、System.IO.Directoryでも使えます。

コード:


foreach (string s in System.IO.Directory.GetFiles("c:\\", "*.ini"))
System.Console.WriteLine(s);



また、Directory.GetFilesのドキュメントには、きっちりこう書いてあります。
引用:

Gets the files in the specified directory.
...
path
The directory from which to return files.



System.IO.DirectoryとSystem.IO.DirectoryInfoとの違いは、System.IO.Directoryがstaticメソッドだけを持つユーティリティクラスであるのに対して、System.IO.DirectoryInfoは特定のディレクトリを指すインスタンスが前提のクラスであるということです。

[ メッセージ編集済み 編集者: NothingBut.NETFW 編集日時 2002-01-15 16:03 ]

[ メッセージ編集済み 編集者: NothingBut.NETFW 編集日時 2002-01-15 16:04 ]
autumn
大ベテラン
会議室デビュー日: 2001/07/27
投稿数: 215
投稿日時: 2002-01-15 17:42
 毎度毎度、まことにすみません。
 引数2個のメソッドを見落としておりました。
 ご指摘感謝。


_________________
川俣晶

[ メッセージ編集済み 編集者: autumn 編集日時 2002-01-15 18:50 ]
1

スキルアップ/キャリアアップ(JOB@IT)