ac# コンソール プログラムにファイルが存在するかどうかを確認しようとしています。唯一のことは、ファイルに任意の名前を付けることができるということです。
私が知っている唯一のことはファイル拡張子であり、この拡張子を持つファイルは 1 つだけです。存在するかどうかを確認してから、名前が何であれそれを使用するにはどうすればよいですか?
使用の問題Directory.GetFiles()
は、最初にファイルシステム全体を調べてから、すべての一致を配列として返すことです。検査された最初のファイルが唯一の一致である場合でも、1 つの一致を返す前に、指定されたルートからファイルシステム全体を調べます。
代わりに、次のようEnumerateFiles()
に、最初の一致に遭遇したときに停止して、遅延ウォークを実行するために使用します。
DirectoryInfo root = new DirectoryInfo( @"C:\" ) ;
string pattern = "*.DesiredFileExtension" ;
FileInfo desiredFile = root.EnumerateFiles( pattern , SearchOption.AllDirectories )
.First()
;
ファイルが見つからない場合、例外がスローされます。代わりに値FirstOrDefault()
を取得するために使用します。null
Directory.GetFiles静的メソッドを試してください。
var fileMatches = Directory.GetFiles("folder to start search in", "*.exe", SearchOption.AllDirectories);
if (fileMatches.Length == 1)
{
//my file was found
//fileMatches[0] contains the path to my file
}
SearchOption 列挙型を使用すると、現在のフォルダーのみを指定することも、再帰的に検索することもできます。
このようなものがうまくいくかもしれません
if (Directory.GetFiles(path, "*.ext").Any())
{
var file = Directory.GetFiles(path, ".ext").First();
}
string extension = "txt";
string dir = @"C:\";
var file = Directory.GetFiles(dir, "*." + extension).FirstOrDefault();
if (file != null)
{
Console.WriteLine(file);
}
ファイルが「dir」の直下に存在しない場合は、Directory.GetFiles に SearchOption.AllDirectories を使用する必要があります。