2016-06-29 9 views
-1

в моей локальной папке файла, содержат файлы. , например, TB2.8.5_asd_asd и TB2.9.5_asd_asd. Как я могу сделать только получить файл, который имя начать с TB2.6.5_System.IO.Directory.GetFiles для определенного имени файла

string[] dirs = System.IO.Directory.GetFiles(ConfigurationManager.AppSettings[@"LocalFolderPath"], "*" + ConfigurationManager.AppSettings["LocalFilesExtension"]).Where(s => s.StartsWith("TB2.6.5_")).ToArray(); 
+0

Что 'ConfigurationManag er.AppSettings ["LocalFilesExtension"] 'содержать? Начинается ли оно с '.'? –

+0

<добавить ключ = "LocalFolderPath" значение = 'C: \ Users \ RNKP74 \ Desktop \ testfolder2' /> <добавить ключ = "LocalFilesExtension" значение =» '/> – Yeep

+0

это начать с пути и расширения – Yeep

ответ

2

Метод Directory.GetFiles() позволяет указать шаблон поиска в качестве одного из входных параметров. вы можете использовать это для выполнения своих требований. Таким образом, код будет выглядеть следующим образом:

string PathToDirectory=Path.Combine(ConfigurationManager.AppSettings[@"LocalFolderPath"], ConfigurationManager.AppSettings[@"LocalFilesExtension"]; 
string searchPattern="TB2.6.5_*.*"; 
string[] dirs = System.IO.Directory.GetFiles(PathToDirectory,searchPattern,SearchOption.TopDirectoryOnly).ToArray(); 

Изменение SearchOption к AllDirectories если вы хотите, чтобы расширить поиск в подкаталогах, Вы можете изменить searchPattern в соответствии с требованиями.

Обновить согласно вашему комментарию:Illegal characters in path.

Это будет зависеть от значения, которое вы храните в конфигурации. то есть., AppSettings["LocalFilesExtension"] если есть \\ используется в качестве разделителя, то необходимо, чтобы не включать @, прежде чем я \, так как он преобразует \\ в \\\\ Если Существует только в Config один \ затем использовать @

+0

Незаконные символы в пути. – Yeep

+0

string PathToDirectory = "ConfigurationManager.AppSettings [@ 'LocalFolderPath'], '*' + ConfigurationManager.AppSettings ['LocalFilesExtension']"; string [] dirs = System.IO.Directory.GetFiles (PathToDirectory, "TB2.6.5 _ *. *", System.IO.SearchOption.AllDirectories) .ToArray(); – Yeep

+0

@Yeep: причиной этого будут данные, которые вы сохранили в конфиге, см. Примечания об обновлении. –

2

Вы можете использовать параметр фильтра установить его

Directory.GetFiles(String, String)

т.е.

"filename.exe" = filters for filename.exe 
"filename.*" = filters all files with the name filename 
"*filename*" = contains filename 
+0

string [] dirs = System.IO.Directory.GetFiles ("путь", " .exe "); – Yeep

+0

Как мне вставить имя? pls advice thx – Yeep