如何解决如何根据文件大小将PDF文件移动到文件夹
我在特定位置有1000万个文件。我想使用C#中的Parallel ForEach根据文件大小对文件进行分组。假设我有5个文件。每个文件5 MB,我想将2个文件移至Folder1,接下来的2个文件移至Folder 2,最后一个文件移至Folder3。因此,每个包含PDF文件的文件夹不能超过10 MB。
样品
文件夹1-文件1,文件2 文件夹2-文件3,文件4 Folder3-File5。
代码示例
var files = Directory.EnumerateFiles("C://Data");;
Parallel.ForEach(files,file
{
var Total Size = file.Lenth;
});
解决方法
创建目录和移动文件是一项受IO约束的操作,这意味着尝试使用public static void GroupFilesBySize(string sourceFolder,string destinationFolder,long thresholdSize)
{
long currentSize = thresholdSize + 1; // Force first file to be placed into a new folder.
int currentFolder = 0;
string currentDestination = ""; // Will be updated on first iteration.
foreach (var file in new DirectoryInfo(sourceFolder).EnumerateFiles("*.pdf"))
{
if (currentSize + file.Length > thresholdSize)
{
currentSize = 0;
++currentFolder;
currentDestination = Path.Combine(destinationFolder,currentFolder.ToString());
Directory.CreateDirectory(currentDestination);
}
file.MoveTo(Path.Combine(currentDestination,file.Name));
currentSize += file.Length;
}
}
进行操作可能几乎没有什么区别(实际上可能会使速度变慢)。
因此,最好的方法是仅使用非并行代码,例如:
{{1}}
请注意,您可能希望在此处进行一些异常处理,以处理诸如磁盘已满,文件被锁定等情况。
,您需要首先将文件分组到文件夹组中(因为您已经具有文件名和长度,因此无法将其并行化),然后为每个组调用Parallel。
.p-col-12,.p-sm-12,.p-md-6,.p-lg-6 {
display: flex;
justify-content: center;
align-items: center;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。