Directory.GetFiles(LocalFilePath, searchPattern);
MSDN ノート:
".txt」の場合、拡張子がちょうど 3 文字の長さである場合の一致動作は、拡張子が 3 文字より多い場合と短い場合とでは異なります。正確に 3 文字のファイル拡張子を持つ searchPattern は、3 文字以上の拡張子を持つファイルを返します。ここで、最初の 3 文字は、searchPattern で指定されたファイル拡張子と一致します。1 文字、2 文字、または 3 文字を超えるファイル拡張子を持つ searchPattern は、searchPattern で指定されたファイル拡張子と正確に一致する長さの拡張子を持つファイルのみを返します。疑問符のワイルドカード文字を使用する場合、このメソッドは、指定されたファイル拡張子に一致するファイルのみを返します. たとえば、ディレクトリ内に "file1.txt" と "file1.txtother" という 2 つのファイルがある場合、"file? 。TXT"最初のファイルだけを返しますが、「ファイル」の検索パターンは.txt" は両方のファイルを返します。
次のリストは、searchPattern パラメーターのさまざまな長さの動作を示しています。
*.abc
、、、、などの拡張子を持つファイルを返し.abc
ます。.abcd
.abcde
.abcdef
*.abcd
は、拡張子が のファイルのみを返します.abcd
。*.abcde
は、拡張子が のファイルのみを返します.abcde
。*.abcdef
は、拡張子が のファイルのみを返します.abcdef
。
searchPattern
パラメータが に設定されている場合、拡張子がではなくなど*.abc
のファイルを返すにはどうすればよいですか?.abc
.abcd
.abcde
たぶん、この機能はうまくいくでしょう:
private bool StriktMatch(string fileExtension, string searchPattern)
{
bool isStriktMatch = false;
string extension = searchPattern.Substring(searchPattern.LastIndexOf('.'));
if (String.IsNullOrEmpty(extension))
{
isStriktMatch = true;
}
else if (extension.IndexOfAny(new char[] { '*', '?' }) != -1)
{
isStriktMatch = true;
}
else if (String.Compare(fileExtension, extension, true) == 0)
{
isStriktMatch = true;
}
else
{
isStriktMatch = false;
}
return isStriktMatch;
}
テストプログラム:
class Program
{
static void Main(string[] args)
{
string[] fileNames = Directory.GetFiles("C:\\document", "*.abc");
ArrayList al = new ArrayList();
for (int i = 0; i < fileNames.Length; i++)
{
FileInfo file = new FileInfo(fileNames[i]);
if (StriktMatch(file.Extension, "*.abc"))
{
al.Add(fileNames[i]);
}
}
fileNames = (String[])al.ToArray(typeof(String));
foreach (string s in fileNames)
{
Console.WriteLine(s);
}
Console.Read();
}
他にもっと良い解決策はありますか?