2016-10-17 2 views
2

Простой вопрос, я знаю, вы можете использовать FileMove для перемещения файла с одного пути на другой. Мой вопрос: как вы можете перемещаться из папки, полной любого типа файлы (.mp3, .txt, .avi) только первый файл .txt из папки 1 в папку 2?Перенесите только первый .txt-файл из папки с помощью C#

+0

Какое у вас определение "first"? В алфавитном порядке? – vcsjones

+0

Что значит «первый файл»? Вы хотите переместить файл в формате .txt в алфавитном порядке из каталога или вы хотите переместить все .txt-файлы в каталоге? Я не совсем понимаю вопрос, извините. – mxscho

+0

в алфавитном порядке, извините, забыли указать это. –

ответ

5

Вы можете передать уайлдкард в Directory.EnumerateFiles():

string filename = Directory.EnumerateFiles("Your search folder here", "*.txt").Min(); 

if (filename != null) 
{ 
    // ... Do something with filename 
} 

Enumerable.Min() возвращает «минимального» строки в последовательность (т.е. первая в алфавитном порядке) или null, если последовательность пуста.

Это эффективно, потому что, когда вы передаете подстановочный знак, такой как *.txt, Directory.EnumerateFiles(), он вызывает метод Windows API, который возвращает только файлы «.txt».

+0

Перечисляет ли 'EnumerateFiles' файлы, отсортированные в алфавитном порядке? – mxscho

+0

@mxscho Nope. Я только заметил, что ОП изменил его спецификацию ... Вздох. –

+0

Вы можете просто добавить шаг сортировки после 'EnumerateFiles' и все еще иметь лучшее решение, которое я предполагаю. – mxscho

2
Directory.GetAllFiles(@"path/to/files") 
     .Select(f => new FileInfo(f)) 
     .First(f => f.Extension == "txt"); 

Это будет взрываться, если в каталоге нет файлов. Он также взорвется, если в каталоге нет текстовых файлов. Это также зависит от вашего определения «Первого»

2

Вы можете использовать GetFiles

string[] files = System.IO.GetFiles(@"C:\users\youruser\documents\", *.txt); 
if(files.GetLength(0) != 0) 
{ 
    System.IO.File.Move(files[0],pathyouwanttomoveitto); 
}