-4
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));

この2行の前に、1行しかありませんでした:

string[] photosfiles = Directory.GetFiles(s, "*.*", SearchOption.AllDirectories);

この行では機能していましたが、上の2行に変更すると機能しなくなりました。

この行を変更して、今 .ToArray() を追加する必要がありました

for (int i = 0; i < photosfiles.ToArray().Length; i++)
            {
                FileInfo fi = new FileInfo((photosfiles.ToArray()[i]));

そして、最終的にその結果は

dirSize + fi.Length = 19526637 および fi.Length = 7916391

そのため、休憩にジャンプします。

最初に1行だけ使用したとき string[] photosfiles = Directory.GetFiles(s, " . ", SearchOption.AllDirectories);

そして、 .ToArray() なしで

ファイルをコピーしてから休憩をとっていたのでうまくいきました。

この 2 行に変更して .ToArray() を追加した後、なぜ機能しないのでしょうか。

4

1 に答える 1