2009-04-24 18 views
7

は基本的に、私はこのコードを持っている:DirectoryInfo.GetFiles()がマスクと一致しないファイルと一致するのはなぜですか?

DirectoryInfo dir = new DirectoryInfo(@"\\MYNETWORK11\ABCDEFG\ABCDEFGHIJKL\00806\"); 
FileInfo[] files = dir.GetFiles("200810*"); 

私はそれが200810.で始まるすべてのファイルと一致することを期待しかし、それは(星が上がらない

20070618_00806.bakと20070817_00806.bakという名前のファイルにマッチですファイル名には、アンダースコアを含めることができる唯一の方法でした)

コマンドプロンプトからdirを試してみましたが、それらのファイルも一致します。どうして?

編集:

はたぶんCを使用:例は良いことではなかったよう。短い名前と照合すると、それを行うには何を持っている場合は、私が実際に照会していたディレクトリがネットワーク共有 ある\\ MYNETWORK11 \ ABCDEFG \ ABCDEFGHIJKL \ 00806 \

は、〜1 200708こと20070817_00806.bakません。ベーク?それは

+0

これは完全には説明していないので、私はコメントとして追加していますが、_はマッチングのための特殊文字です。これらのファイル名に_の代わりに2を入れれば、もう少し近いものになります。 –

+0

@Joel、あなたは_はウィンドウやSOフォーマットで特別だと言っていますか? – scottm

+0

私のために働く。 20070618_00806.bakという名前のファイルを作成し、フォルダ内に 'dir 200810 *'を実行します。ファイルが見つかりません。何か不足していますか? –

答えて

14

msdnは述べている

「ため8.3形式 形式と長いファイル名形式の両方で ファイル名、 に対してこの方法をチェック「*1*.txt」 は、予期しないファイル名を返すことがあります。 例えば、 の検索パターンを使用して、類似した検索パターンが「*1*.txtは」 「longfilename.txt」を返します 同等の8.3ファイル名形式理由でしょう は「longf~1.txt」となります。

原因が考えられますか?

4

のいずれかと一致していない私は、コマンドラインからまたはテストアプリのいずれかで、これを再現することはできません。

c:\Users\Jon\Test>echo > 20070618_00806.bak 

c:\Users\Jon\Test>echo > 2007081700806.bak 

c:\Users\Jon\Test>dir 200810* 
Volume in drive C is OS 
Volume Serial Number is B860-7E20 

Directory of c:\Users\Jon\Test 

File Not Found 

とC#アプリ:

using System; 
using System.IO; 

class Test 
{ 
    static void Main() 
    { 
     foreach (var file in new DirectoryInfo(".").GetFiles("200810*")) 
     { 
      Console.WriteLine(file); 
     } 
    } 
} 

(このdoesnのを結果を印刷しないでください)

おそらく、OSには違いがあります。どこのOSが使用していますか? (私は、32ビットにVistaのよ)

+0

@Jon Windows XP – scottm

+0

私にとっても同じ動作です。 –

+0

このテストをローカルで実行すると、期待どおりに動作します。私は別のネットワーク共有でそれを試してみても、期待どおりに動作します。 – scottm

1

GetFilesは長いファイル名と短いファイル名を検索します...それは何とか短いファイル名に一致していませんか?

6

は、コマンドラインからこれを試してみてください:

dir /x 200810* 

「/ x」のそれは短いファイル名を表示するようになります、だけでなく、長いファイル名。これにより、短いファイル名が実際に "200810"で始まるかどうかを確認できます。

関連する問題