2011-10-11 2 views
4

У меня есть 10 архивных файлов в папке, имеющие этот путькак получить конкретные имена файлов с помощью C#

Целевой_каталог = «C: \ Docs \ папка \»

некоторые молнии названия файлов, как этот

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 этих файлов.

Может кто-нибудь предложить любую идею?

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

ответ

10

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

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

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

+0

Большого спасибо оборотного сейчас .... –

4

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

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

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

или

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

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

+0

Большого спасибо ... + бал 1 также хороший ответ .. –

1

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

+0

Thanq Яхья за поддержку .... –

1
// 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 
    } 
} 
+0

Большого спасибо. .... –

1
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 
} 
+0

Много спасибо ..... –

1

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

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- \ д + .zip» означает строка «ABC-» с последующим любым количеством цифр, а затем. затем строка «молния» (regular expression syntax)

+0

много спасибо Pengman .... –

Смежные вопросы