как получить конкретные имена файлов с помощью c#

#c# #.net #winforms #file #filenames

#c# #.net #winforms #файл #имена файлов

Вопрос:

У меня есть 10 zip-файлов в папке с таким путем

targetDirectory = «C:docsfolder «

некоторые имена zip-файлов выглядят следующим образом

 abc-19870908.Zip 
abc-19870908.zip
abc-12345678.zip
  

и некоторые из них похожи на это…

 doc.zip
doc123.zip  
..
  

Я получаю все имена файлов с помощью следующего кода…

 string [] fileEntries = Directory.GetFiles(targetDirectory); 
foreach(string fileName in fileEntries)
{
  // here I need to compare , 
  // I mean I want to get only these files which are having 
  // these type of  filenames `abc-19870908.Zip`

  if (filename == "")
  {

       // I want to do something
   }
}
  

Что мне нужно заключить в двойные кавычки в этой строке, if(filename == "") чтобы получить похожие abc-19870908.Zip имена файлов.

Кто-нибудь, пожалуйста, предложит какую-либо идею по этому поводу?

Большое спасибо…

Ответ №1:

Если вас интересуют только zip-файлы, содержащие тире, вы можете указать шаблон поиска в Directory.GetFiles.

 string [] fileEntries = Directory.GetFiles(targetDirectory, "*-*.zip"); 
  

Проверьте эту ссылку для получения дополнительной информации об этих шаблонах поиска:http://msdn.microsoft.com/en-us/library/wz42302f.aspx

Ответ №2:

Я думаю, вы можете сделать

  if (filename.Contains("-"))
 {
    ...
 }
  

если - всегда присутствует в именах файлов, которые вас интересуют

или

  if (filename.StartsWith("abc-"))
 {
    ...
 }
  

если имена файлов всегда начинаются с abc- для тех, которые вас интересуют.

Ответ №3:

вы можете сделать if(filename.StartsWith ("abc-") ) или вы можете сделать if (filename.Contains ( "-" ) ) или вы можете сделать string [] fileEntries = Directory.GetFiles(targetDirectory, "abc-*.Zip");

Ответ №4:

 // Consider using this overload:
// public static string[] GetFiles( string path, string searchPattern)

string [] fileEntries = Directory.GetFiles(targetDirectory, "abc*.zip");
  

В качестве альтернативы вы можете использовать регулярное выражение следующим образом:

 string [] fileEntries = Directory.GetFiles(targetDirectory);
foreach(string fileName in fileEntries)
{
   if(Regex.Match (filename, @"abc.*?.zip", RegexOptions.IgnoreCase))
   {
      // i want to do something
   }
 }
  

Ответ №5:

 List<String> files = Directory.GetFiles(@"C:docsfolder").ToList();
var g = from String s in files where s.StartsWith("abc") select s;
foreach(var z in g)
{
   //Do stuff in here as a replacement for your if
}
  

Ответ №6:

Вы могли бы использовать регулярное выражение, которое соответствует вашим именам файлов, что-то вроде этих строк:

 string sPattern = "abc-d .zip";

string [] fileEntries = Directory.GetFiles(targetDirectory); 
foreach(string fileName in fileEntries)
{
  // here i need to compare , i mean i want to get only these files which are having these type of  filenames `abc-19870908.Zip`
  if(System.Text.RegularExpressions.Regex.IsMatch(filename , sPattern, System.Text.RegularExpressions.RegexOptions.IgnoreCase))
  {

       // i want to do something
  }

}
  

Регулярное выражение «abc-d .zip » означает
строка «abc-«, за которой следует любое количество цифр, за которым следует a . за которым следует строка «zip» (синтаксис регулярного выражения)