在C#中按特定顺序搜索序列号的文件

时间:2012-06-27 14:54:35

标签: c# itextsharp

我有一个包含超过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格式。

非常感谢你的帮助

3 个答案:

答案 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);
});