#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» (синтаксис регулярного выражения)