Как я могу получить одно имя файла, выполнив поиск только по расширению? - PullRequest
3 голосов
/ 13 июля 2011

Я использую C # с WinForms, и я хочу получить одно имя файла, ища только расширение? Я знаю о методе Directory.GetFiles, но я ищу только один файл. Я сейчас использую ...

 string[] files = Directory.GetFiles(@"c:\tpro", "*.fdn");
 string test = files.GetValue(0).ToString();

Это работает, чтобы получить имя файла, который заканчивается на .fdn. Это работает, потому что это будет только файл в каталоге, который заканчивается .fdn. Так что использование индекса "0" в этом случае работает. Но это просто не устраивает меня. Есть ли лучший способ сделать это?

Спасибо

Ответы [ 2 ]

11 голосов
/ 13 июля 2011

Нет;это единственный разумный способ сделать это.
Однако вы неправильно используете массив;Вы должны написать string test = files[0].

. В .Net 4.0 вы можете использовать версию итератора, чтобы избежать выборки большего количества файлов, чем необходимо:

IEnumerable<string> files = Directory.EnumerateFiles(@"c:\tpro", "*.fdn");
string test = files.First();

Это будет намного быстрее для огромных каталогов.

5 голосов
/ 13 июля 2011

Вы также можете использовать linq, добавив using System.Linq; к своему файлу и сделав:

string test = Directory.GetFiles(@"c:\tpro", "*.fdn").FirstOrDefault();

, который установит test на первое найденное имя файла, или оставит его null, если нет файлабыл найден.Хотя это в основном то же самое, что и ваш исходный код, за исключением того, что ваш исходный код будет выдавать исключение, если нет соответствующих файлов.

...