C#目录列出海量目录

4 c# file-io

这是场景:

我有一个包含2百多万个文件的目录.我下面的代码在大约90分钟内写出所有文件.有没有人有办法加快速度或使这段代码更有效率?我还想在列表中写出文件名.

string lines = (listBox1.Items.ToString());
string sourcefolder1 = textBox1.Text;  
string destinationfolder = (@"C:\anfiles");  
using (StreamWriter output = new StreamWriter(destinationfolder + "\\" + "MasterANN.txt"))  
{  
    string[] files = Directory.GetFiles(textBox1.Text, "*.txt");  
    foreach (string file in files)  
    {  
        FileInfo file_info = new FileInfo(file);
        output.WriteLine(file_info.Name);  
    }  
 }  
Run Code Online (Sandbox Code Playgroud)

减速是它一次写出1行.

获取所需的所有文件大约需要13-15分钟.

以下75分钟正在创建文件.

alb*_*ein 8

如果您不为每个文件创建FileInfo实例,它可能会有所帮助,请使用Path.GetFileName:

string lines = (listBox1.Items.ToString());  
        string sourcefolder1 = textBox1.Text;  
        string destinationfolder = (@"C:\anfiles");  
        using (StreamWriter output = new StreamWriter(Path.Combine(destinationfolder, "MasterANN.txt"))  
        {  
            string[] files = Directory.GetFiles(textBox1.Text, "*.txt");  
            foreach (string file in files)  
            {  
                output.WriteLine(Path.GetFileName(file));
            }  
        }
Run Code Online (Sandbox Code Playgroud)


小智 6

你正在读取200多万个文件描述符到内存中.根据您拥有的内存量,您可能需要进行交换.尝试通过过滤文件名将其分解为更小的块.


Ben*_*ill 5

我需要知道的第一件事是减速在哪里?Directory.GetFiles()执行需要89分钟,还是延迟调用FileInfo file_info = new FileInfo(file);

如果延迟来自后者,您可以通过从路径获取文件名而不是创建FileInfo实例来获取文件名来加快速度.

System.IO.Path.GetFileName(file);
Run Code Online (Sandbox Code Playgroud)