我是新手,我尝试使用文件名来检索文件,文件名具有以下定义:
项目编号+修订版+批号.pdf
例如:
此示例文件:1109093-A2(85806S).pdf
对于我的搜索结果,我只想拥有这些文件。
1109092-A2(85806S).pdf
我必须只有文件,实际的版本就像那里的文件(A3,A2)。
但它不是,现在我仍然得到所有文件,我怎么能按修订版排序呢???
A1,A2,A3,A ....(修订版)代表我应该使用的选择标准。我为这份工作写了以下函数。
private string[] GetFiles()
{
strSourcePath = textBox1.Text;
strTargetPath = textBox2.Text;
string fileName = string.Empty;
strExtension = "*).pdf";
string[] files = null;
if (Directory.Exists(strSourcePath))
{
files = Directory.GetFiles(strSourcePath, strExtension, SearchOption.AllDirectories);
var Result = "";
string joined = String.Join("# ", Result);
files = null;
Result = joined.Split('#');
files = Result.Where(file => Regex.IsMatch(Path.GetFileName(file), "^[0-9]+")).ToArray();
}
else
{
MessageBox.Show("Source path does not exist!");
}
return files ;
}
答案 0 :(得分:0)
获得路径后,您可以解析文件名,提取修订版本等,并根据您的标准进行排序。
此代码解析为匿名类(为了便于阅读)并基于ItemNumber,Revision进行排序。
匿名类包含路径和项目编号/修订/结束编号信息。
请参阅演示以获取完整示例
var paths = new [] {
"1109093-A2 (85806S).pdf",
"1109093-A3 (85806S).pdf",
"1109092-A1 (85806S).pdf",
"1109092-A2 (85806S).pdf",
};
var result = paths.Select(x => {
var match = Regex.Match(x, @"(?<ItemsNumber>\d+)-(?<Revision>\w+)\s+\((?<EndItemNumber>\w+)\).pdf");
if (match.Success)
{
return new { ItemNumber = match.Groups[1].Value, Revision = match.Groups[2].Value, EndItemNumber = match.Groups[3].Value, Path = x };
}
else {
return new { ItemNumber = "", Revision = "", EndItemNumber = "", Path = x };
}
})
.OrderBy(x => x.ItemNumber).ThenBy(x => x.Revision);
答案 1 :(得分:0)
使用你的模板我编写了这个函数,但返回值总是相同的 - 一个项目,但不是我预期的列表。我不知道为什么。你有什么想法吗?
private string[] SortFileName(string []TemP)
{
var paths = GetTheFileName(TemP);
List<string> TheCollection = new List<string>();
var result = paths.Select(x => {
var match = Regex.Match(x, @"(?<ItemsNumber>\d+)-(?<Revision>\w+)\s+\((?<EndItemNumber>\w+)\).pdf");
if (match.Success)
{
return new { ItemNumber = match.Groups[1].Value, Revision = match.Groups[2].Value, EndItemNumber = match.Groups[3].Value, Path = x };
}
else {
return new { ItemNumber = "", Revision = "", EndItemNumber = "", Path = x };
}
})
.GroupBy(x => x.ItemNumber)
.Select(x => x.OrderByDescending(y => y.Revision).First());
foreach (var item in result)
{
TheCollection.Add(item.Path.ToString());
}
return TheCollection.ToArray();
}
PS:GetTheFileName(TemP);
返回一个包含超过130个项目的数组。感谢您的帮助。