从文本文件中获取文件大小

4
尝试从列表中获取文件大小,然后将结果输出到文本文件中。目前我已经能够完成读取文件的第一半工作,检查文件是否存在,然后输出到控制台和文本文件中。
我是新手程序员,“这周刚开始学”。这可能是一个简单的问题,我尝试过但无法正常运行。
我尝试将其放在foreach循环内,并尝试读取路径,但它没有起作用。
        DirectoryInfo di = new DirectoryInfo(path);
        FileInfo[] fiArr = di.GetFiles();
        foreach (FileInfo f in fiArr)

我的代码如下

    static void Main(string[] args)
    {

        string[] lines = System.IO.File.ReadAllLines(@"C:\Locations2.txt");
        foreach (string path in lines)
            if (File.Exists(path))
                using (System.IO.StreamWriter file = new System.IO.StreamWriter(@"C:\Results.txt", true))
                {
                    file.WriteLine("File found" + "\t" + path);
                    Console.WriteLine("File found" + "\t" + path);
                }


            else
                using (System.IO.StreamWriter file = new System.IO.StreamWriter(@"C:\Results.txt", true))
                {
                    file.WriteLine("Does not Exist" + "\t" + path);
                    Console.WriteLine("Does not Exist" + "\t" + path);
                }

    }

感谢您的提前帮助,如果这段代码有问题,您能否指出为什么不能这样做?

1
提示:将文件的创建/打开放在for循环之外... - Mitch Wheat
1个回答

10
您可以使用FileInfo类获取有关文件的信息,包括其大小。
例如:
var fileName = @"C:\Locations2.txt";
FileInfo fi = new FileInfo(fileName);
var size = fi.Length;
Console.WriteLine("File Size in Bytes: {0}", size);

你之前在循环中的代码理念是正确的,只是实现方式不对。如果你知道要打开的文件名,就不需要通过DirectoryInfo.GetFiles这个路线了。可以直接访问FileInfo
因此,你的代码应该像这样:
static void Main(string[] args)
{

    string[] lines = System.IO.File.ReadAllLines(@"C:\Locations2.txt");
    foreach (string path in lines)
        if (File.Exists(path))
            using (System.IO.StreamWriter file = new System.IO.StreamWriter(@"C:\Results.txt", true))
            {
                file.WriteLine("File found" + "\t" + path);
                Console.WriteLine("File found" + "\t" + path);

                FileInfo fi = new FileInfo(path);
                var size = fi.Length;
                file.WriteLine("File Size in Bytes: {0}", size);
                Console.WriteLine("File Size in Bytes: {0}", size);
            }


        else
            using (System.IO.StreamWriter file = new System.IO.StreamWriter(@"C:\Results.txt", true))
            {
                file.WriteLine("Does not Exist" + "\t" + path);
                Console.WriteLine("Does not Exist" + "\t" + path);
            }

}

这只会为那个文件名找到大小。在 C:\Locations2.txt 中是一份位置列表,这些位置需要被传递以查找它们的文件大小。例如,在 locations2.txt 文件里的新行上,它将包含 "c:\1.txt, c:\2.txt, c:\3.txt"。 - Charles
我不理解你的意思。你能给我们展示一下 Locations2.txt 文件里面的样本吗?可以显示一些输出结果吗?请在你的问题中添加这些额外信息。 - Eli Gassert
"c:\1.txt, c:\2.txt, c:\3.txt" 每个路径占一行 - Charles
我修改了我的答案,使其更加明确。请查看我添加到if(FileExists)分支的4行代码。给定path,它创建一个FileInfo,然后获取长度并将其记录到文件和控制台中。 - Eli Gassert
非常感谢您为我解决了这个问题。我知道它一定很简单。 - Charles

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接