Как получить конкретные имена файлов с помощью C # - PullRequest
4 голосов
/ 12 октября 2011

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

TargetDirectory = "C: \ docs \ folder \"

некоторые имена файлов 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 эти имена файлов.

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

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

Ответы [ 6 ]

10 голосов
/ 12 октября 2011

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

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

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

4 голосов
/ 12 октября 2011

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

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

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

или

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

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

1 голос
/ 12 октября 2011

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

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-», за которой следует любое количество цифр, после которых следует «. затем следует строка "zip" ( синтаксис регулярного выражения )

1 голос
/ 12 октября 2011
List<String> files = Directory.GetFiles(@"C:\docs\folder\").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
}
1 голос
/ 12 октября 2011
// 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
   }
 }
1 голос
/ 12 октября 2011

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

...