Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从文本文件获取文件大小_C# - Fatal编程技术网

C# 从文本文件获取文件大小

C# 从文本文件获取文件大小,c#,C#,尝试从列表中获取文件大小,然后将结果输出到文本文件。目前,我已经能够从文件读取的前半部分工作,检查文件是否存在,然后输出到控制台和文本文件 我是“本周刚开始”的新编程人员。这可能是一个很容易的问题,而且已经尝试过了,但还不能完全实现 我试着把这个放在foreach循环中,并尝试读取路径,但它不起作用 DirectoryInfo di = new DirectoryInfo(path); FileInfo[] fiArr = di.GetFiles();

尝试从列表中获取文件大小,然后将结果输出到文本文件。目前,我已经能够从文件读取的前半部分工作,检查文件是否存在,然后输出到控制台和文本文件

我是“本周刚开始”的新编程人员。这可能是一个很容易的问题,而且已经尝试过了,但还不能完全实现

我试着把这个放在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);
                }

    }

提前谢谢,如果这是一个糟糕的代码,你能告诉我为什么不应该这样做吗?

你可以通过
FileInfo
类获得关于文件的信息,包括文件大小

e、 g

上面放在循环中的代码是正确的概念,只是错误的实现。如果知道要打开的文件名,则无需通过
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);
            }

}

提示:将文件创建/打开放在for循环之外……这将只找到该文件名。在C:\Locations2.txt中有一个位置列表,需要传递这些位置来查找这些位置的文件大小,例如,在文件Locations2.txt中的新行上,它会有“C:\1.txt,C:\2.txt,C:\3.txt”我不明白你的意思。你能给我们一些Locations2.txt里面的东西的样本吗?给我们看一些输出?请用这些附加信息修改您的问题。“c:\1.txt,c:\2.txt,c:\3.txt”新行上的每个路径我修改了我的答案,使之更明确。请参阅我添加到
if(FileExists)
分支的4行。给定
路径
,它会创建一个
文件信息
,然后获取长度并将其记录到文件和控制台。非常感谢您为我解决了这个问题。我知道这会很简单。
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);
            }

}