如何获取大小小于70MB的所有文件的名称列表

时间:2015-09-10 21:06:02

标签: c# .net winforms

string[] fileEntries = Directory.GetFiles(@"d:\", "*.avi");
        public static string filetoupload;
        int count = 0;

        private void button1_Click(object sender, EventArgs e)
        {
            if (fileEntries.Length > 0)
            {
                filetoupload = fileEntries[count];
                count += 1;
            }
        }

        private void FilesSizes()
        {
            string[] sizes = { "B", "KB", "MB", "GB" };
            double len = new FileInfo(filetoupload).Length;
            int order = 0;
            while (len >= 1024 && order + 1 < sizes.Length)
            {
                order++;
                len = len / 1024;
            }
            string result = String.Format("{0:0.##} {1}", len, sizes[order]);
        }

现在fileEntries包含所有avi文件。 但我希望它只包含使用FilesSizes方法不超过70MB的avi文件。

我试过这种方式但得到错误:

private void FilesSizes()
        {
            for (int i = 0; i < fileEntries.Length; i++)
            {
                string[] sizes = { "B", "KB", "MB", "GB" };
                double len = new FileInfo(fileEntries[i]).Length;
                int order = 0;
                while (len >= 1024 && order + 1 < sizes.Length)
                {
                    order++;
                    len = len / 1024;
                }
                string result = String.Format("{0:0.##} {1}", len, sizes[order]);

                if (len > 70)
                    fileEntries[i].Remove(i);
            }
        }

首先,我不确定是否(len> 70)是检查文件大小是否大于70MB的正确方法。

第二个错误我在这一行:

fileEntries[i].Remove(i);

问题是例如当i = 14时: startIndex必须小于字符串的长度

我现在尝试也返回一个List

private List<string> FilesSizes()
        {
            List<string> filestoremove = null;
            foreach(string item in fileEntries)
            {
                string[] sizes = { "B", "KB", "MB", "GB" };
                double len = new FileInfo(item).Length;
                int order = 0;
                while (len >= 1024 && order + 1 < sizes.Length)
                {
                    order++;
                    len = len / 1024;
                }
                string result = String.Format("{0:0.##} {1}", len, sizes[order]);

                if (len > 70)
                {
                    filestoremove = new List<string>(fileEntries);
                    filestoremove.Remove(item);
                }

            }

            return filestoremove;
        }

但出于某种原因,它只删除了List中的一个文件,并且有22个文件,然后超过100MB,所以我做错了。

1 个答案:

答案 0 :(得分:0)

一种方法是修改update方法,使其返回文件大小。然后在按钮单击中,您可以遍历FilesSizes数组并查找每个条目的文件大小。如果文件大小合适,那么你可以用它做一些事情:添加到一个新数组(或者更好,fileEntries)或附加到另一个字符串。

您可以使用Linq查询文件系统,使其更加优雅。这里有一个有趣的例子:https://msdn.microsoft.com/en-us/library/bb546154.aspx

尝试完成后,如果您需要更多帮助,请发布您的代码。