C# 目录中最大的文件

C# 目录中最大的文件,c#,C#,我们被指派从目录中读取信息。我正在努力寻找具有最大值的文件。我已经试过了 using System.IO; static void Main(string[] args) { DirectoryInfo folderInfo = new DirectoryInfo("path"); FileInfo[] files = folderInfo.GetFiles(); int largestSize; for (largestSize = 0; largest

我们被指派从目录中读取信息。我正在努力寻找具有最大值的文件。我已经试过了

using System.IO; 

static void Main(string[] args)
{
    DirectoryInfo folderInfo = new DirectoryInfo("path");
    FileInfo[] files = folderInfo.GetFiles();

    int largestSize;

    for (largestSize = 0; largestSize < files.Length; largestSize++)
    {
        Console.WriteLine(files[largestSize].Length);
    }

    Console.ReadLine();
}
使用System.IO;
静态void Main(字符串[]参数)
{
DirectoryInfo folderInfo=新的DirectoryInfo(“路径”);
FileInfo[]files=folderInfo.GetFiles();
int最大尺寸;
对于(最大大小=0;最大大小
但这是行不通的。当我说它不工作时,我的意思是它在列表中显示目录中所有文件的文件大小。我非常困惑,因为这正是我导师的建议。“为从0开始的最大文件创建一个变量,并在文件中循环查找最大大小”

我怀疑我能否使用或理解Foreach循环,因为到目前为止,我只学习了For、do-while、while以及if和if-else语句

您可以使用:

long largestSize = 0;
for (int i = 0; i < files.Length; i++)
{
    if (files[i].Length > largestSize)
         largestSize = files[i].Length;
}
Console.WriteLine(largestSize);
long largestSize=0;
for(int i=0;ilargestSize)
最大大小=文件[i]。长度;
}
控制台写入线(最大尺寸);

这将按大小降序对文件进行排序

new DirectoryInfo(path).EnumerateFiles()
                       .OrderByDescending(f => f.Length)
                       .FirstOrDefault();
并将返回最大的文件,如果目录不包含任何文件,则返回null。

DirectoryInfo folderInfo=new DirectoryInfo(@“C:\test”);
   DirectoryInfo folderInfo = new DirectoryInfo(@"C:\test");
        FileInfo[] files = folderInfo.GetFiles();

        long[] sort = new long[files.Length];


        for (int largestSize = 0; largestSize < files.Length; largestSize++)
        {
            int index = 0;
            for (int largestSize2 = 0; largestSize2 < files.Length; largestSize2++)

            {
                if (files[largestSize].Length < files[largestSize2].Length)
                {
                    index++;
                }

            }  
            sort[index] = files[largestSize].Length;

        }


        for (int i = 0; i < sort.Length; i++)
        {
            Console.WriteLine(sort[i]);
        }
        Console.ReadLine();
FileInfo[]files=folderInfo.GetFiles(); long[]sort=new long[files.Length]; 对于(int largestSize=0;largestSize
我尝试了一种最简单的方法,我可以对u进行uderstandable。首先,我循环文件,对所有元素进行第二次循环,然后比较值,并根据数组中的顺序对它们进行排序。比较的目的是希望,当然,对于排序文件而言,依赖于大小而不是最大值,最大值总是排序[0].NET4(或.NET3.5中的
GetFiles
):

对于更多文件,PLINQ可用于小的加速:

long maxSize = new DirectoryInfo("path").EnumerateFiles().AsParallel().Max(f => f.Length);

我认为您需要花更多的时间了解代码中的每个语句和构造实际上在做什么,而不是将代码视为执行特定任务的不透明魔法。实例化一个
FolderInfo
对象(它表示一个文件夹,并公开允许您获取有关该文件夹及其内容的更多信息的成员)。您可以使用此实例获取
FileInfo
对象的数组,这些对象类似地表示文件。然后使用名为
largestSize
(这可能是您出错的地方)的计数器在文件数组上迭代,对于每个
FileInfo
,将
Length
属性的值写入控制台。最后,您等待用户按enter键。我是一个初学者,绝对的初学者。这是我的第一门编程语言,在我几乎不了解VB编码之前。我会仔细检查并试着理解我在做什么。不知道为什么你会得到这么多的反对票,但你可能想使用
Max
,而不是
OrderBy
FirstOrDefault
,因为按大小对dir中的每个文件进行排序没有意义。然后他有新的东西要学。这种“哦,学习的东西”真的很无聊。用LINQ编写这样的代码在所有函数式编程语言中都是绝对正常和初学者的事情。没有一个理由不学习这些东西,也不是作为初学者。@Sid:我倾向于同意!为什么要搞乱不可读的循环呢?反正以后你会跳过这些循环,而不要像LINQ那样学习函数,这并不难理解。反之亦然,它很容易使用和阅读。@SidBurn但是为了节省一些击键而执行额外的工作和增加代码的时间复杂度并不是你应该让新手放弃的方法。事情应该尽可能地方便,但不能更方便。如果您真的喜欢LINQ的表现力,可以添加一个可枚举的扩展方法,比如
MaxBy
,或者使用正确的算法查找max项并返回它。然后在简短、好看的代码中使用它。@abatishchev这不是过早的优化。我们不是为了节省时间而对程序进行微调,我们是在讨论如何消除数量级的完全无用的活动。这是一个使用正确算法的案例,其要点是学习如何以编程方式解决问题。当你需要的是螺丝刀时,拔出LINQ锤子是个坏主意,即使LINQ是一个非常好的锤子。对不起,我的错误-我已经修好了it@Domestos99非常感谢,我以前使用过类似的代码,但我错了,因为我没有使用largestSize=files[I].Length;我写了这个最大的size+=文件[i].Length@Domestos99以显示我尝试的名称文件[largestSize]。名称和文件[I]。名称,但都不显示最大文件的名称。。。我做错什么了吗?@farhabdul你不能用文件的大小作为索引,我也错了。我将使用next valiable作为最大文件的索引。@Domestos99我知道我速度很慢,很抱歉,但我不明白?我所了解的是,使用I和largestSize不能用作索引。我不了解,也无法确定最大文件的下一个变量是什么。
long maxSize = new DirectoryInfo("path").EnumerateFiles().AsParallel().Max(f => f.Length);