为什么目录的大小超过 79mb,但实际上大约是 19mb
本文关键字:实际上 19mb 79mb 为什么 | 更新日期: 2023-09-27 18:26:51
s = Environment.GetEnvironmentVariable("UserProfile") + "''Pictures";
string[] extensions = { "*.bmp", "*.jpg", "*.png", "*.gif" };//add extensions you want to filter first
var photosfiles = extensions.SelectMany(x => Directory.GetFiles(s, x));
//string[] photosfiles = Directory.GetFiles(s, "*.*", SearchOption.AllDirectories);
for (int i = 0; i < photosfiles.ToArray().Length; i++)
{
FileInfo fi = new FileInfo((photosfiles.ToArray()[i]));
DirectoryInfo d = new DirectoryInfo(tempphotos);
long dirSize = DirSize(d);
//if copying the file would take the directory over 50MB then don't do it
if ((dirSize + fi.Length) <= 24117248)
fi.CopyTo(tempphotos + "''" + fi.Name,true);
else
break;
}
我改变的是这个:
string[] extensions = { "*.bmp", "*.jpg", "*.png", "*.gif" };//add extensions you want to filter first
var photosfiles = extensions.SelectMany(x => Directory.GetFiles(s, x));
在这两行之前,我只有一行:
string[] photosfiles = Directory.GetFiles(s, "*.*", SearchOption.AllDirectories);
有了这条线,它就可以工作了,但改成上面的两行后就不工作了。
我不得不更改此行并立即添加.ToArray((
for (int i = 0; i < photosfiles.ToArray().Length; i++)
{
FileInfo fi = new FileInfo((photosfiles.ToArray()[i]));
然后最后的结果是
目录大小 + fi。长度 = 19526637和菲。长度 = 7916391
所以它直接跳到了休息时间。
当我第一次使用时,只有一个行字符串[] photosfiles = Directory.GetFiles(s, ".", SearchOption.AllDirectory(;
然后没有.ToArray((
它工作得很好,它正在复制文件,然后进行中断;
为什么现在它无法正常工作后更改为这两行并添加了.ToArray(( ?
我不是 100% 确定我遵循所有内容,但有几件事。 这一行:
var photosfiles = extensions.SelectMany(x => Directory.GetFiles(s, x));
正在构建查询,但不是实际数组。ToArray()
运行查询并在调用时生成数组。 在您的代码中,您实际上多次构建数组,这是不必要的。 相反,您可以使用 foreach 循环遍历查询:
foreach(var file in photoFiles)
{
FileInfo fi = new FileInfo(file);
// Your code here
}
还有一个小说明是,您的评论说如果超过 50 MB,请阻止复制,但该数字实际上是 23 MB。