我有一个包含超过200K图像的文件夹。 某些图像将遵循以下文件名模式:
5093_1.jpg
5093_2.jpg
5093_3.jpg
5093_4.jpg
5093_5.jpg
5094_1.jpg
5094_2.jpg
5094_3.jpg
我的计划是使用iTextSharp将每组图像合并为PDF。当我说一组图像时,下面的那些
5093_1.jpg
5093_2.jpg
5093_3.jpg
5093_4.jpg
5093_5.jpg
将成为5093.pdf和剩余的5094.pdf。
如下所示
iTextSharp.text.Document Doc = new iTextSharp.text.Document(PageSize.LETTER);
//Store the document on the desktop
string PDFOutput = Path.Combine(PDFFolder, "PDFs", tmp[0] + "_" + tmp[1].Replace(".jpg", "") + ".pdf");
PdfWriter writer = PdfWriter.GetInstance(Doc, new FileStream(PDFOutput, FileMode.Create, FileAccess.Write, FileShare.Read));
//Open the PDF for writing
Doc.Open();
Doc.NewPage();
//Doc.Add(new iTextSharp.text.Jpeg(new Uri(fi.FullName)));
Image jpg = Image.GetInstance(new Uri(fi.FullName));
jpg.ScaleToFit(700f, 700f);
Doc.Add(jpg);
Doc.Close();
我的问题是,我会找到所有5093或任何数字的文件,以便我可以循环并将它们固定为PDF格式。
非常感谢你的帮助
答案 0 :(得分:1)
var path = //your path
var files = Directory.GetFiles(path, "*_*.jpg");
//group only by the bit of the filename before the '_'
var groupedBySamePre_Value = files.GroupBy(p => Path.GetFileNameWithoutExtension(p).Split('_')[0]);
foreach (var group in groupedBySamePre_Value)
{
//this is a new file group pdf
foreach (var file in group.OrderBy(p => p))
{
//add the file to the pdf
}
//end of file group pdf
}
答案 1 :(得分:0)
可能你可以这样做:
Regex regex= new Regex(@"[0-9]+_[0-9].jpg");
var files = Directory.GetFiles(yourPath, "*.jpg").
Where(path => regex.IsMatch(path)).ToList();
在regex
我假设以下格式
{at least one number}_{one number}.jpg
应该为你工作。
答案 2 :(得分:0)
使用Array.Sort的另一个建议:
DirectoryInfo dirInfo=new DirectoryInfo(imageDirPath);
FileInfo fileInfos = dirInfo.GetFiles(*_*.jpg);
Array.Sort(fileInfos, delegate(FileInfo f1, FileInfo f2) {
return f1.Name.CompareTo(f2.Name);
});