创建文件批的算法



我有一个目录,其中所有不同版本的文件都可用。比如

ABC.pdfABC_1.pdf……

XYZ.tif。。。。。XYZ_25.tif

MNO.tiff

我想根据使用的要求制作n批m个文件。

假设文件夹中有ABC.pdf到ABC_24.pdf&XYZ.tif到XYZ_24.tif文件。总共50个文件。我想创建两个批次,每个批次25个文件。因此,首先(我/如何)需要确保列表中的所有文件都经过排序,然后我可以执行一些逻辑,将列表划分为两个适当的批次

1) ABC.pdf至ABC_24.pdf

2) XYZ.tif到XYZ_24.tif

但如果我有26个文件(如开头所述),那么它将像

1) ABC.pdf至ABC_24.pdf

2) XYZ.tif到XYZ_24.tif

3) ABC_25.pdf和XYZ_25.tif

因此,我希望在这里正确/有意义地批量分配文件。我更愿意尽可能少地表演。所以,我尝试了如下lambda表达式:

List<string> strIPFiles =  Directory.GetFiles(folderPath, "*.*").
Where(file => file.ToLower().EndsWith("tiff") || file.ToLower().EndsWith("tif") || file.ToLower().EndsWith("pdf")).ToList();
int batches = 2, filesPerBatch = 25; //for example

我需要使用-strIPFiles.Sort()吗;它在任何情况下都有用吗?还是我总是得到文件的排序列表?

如何从列表中创建批处理-使用lambda表达式,正如我上面所表达的那样?

谢谢你的帮助。

不确定我是否完全理解你的问题。我假设您正在寻找一种方法,将文件划分为指定大小的批(如文件数),并且您还希望它们根据文件名进行分组。

如果这有帮助,请告诉我:

public static void CreateBatch(int batchSize)
{
string sourcePath = @"C:UsershariDesktoptest";
var pdfs = Directory.EnumerateFiles(sourcePath, "*.pdf", SearchOption.TopDirectoryOnly);
var tiffs = Directory.EnumerateFiles(sourcePath, "*.tiff", SearchOption.TopDirectoryOnly);
var images = pdfs.Union(tiffs);
var imageGroups = from image in images
group image by Regex.Replace(Path.GetFileNameWithoutExtension(image), @"_d+$", "") into g
select new { GroupName = g.Key, Files = g.OrderBy(s => s) };
List<List<string>> batches = new List<List<string>>();
List<string> batch = new List<string>();
foreach (var group in imageGroups)
{
batch = batch.Union(group.Files).ToList<string>();
if (batch.Count >= batchSize)
{
batches.Add(batch);
batch = new List<string>();
}
}            
}

相关内容

  • 没有找到相关文章

最新更新