创建一个C#方法以保存txt文件中的所有文件路径

时间:2011-03-01 07:10:23

标签: c# .net

我想在C#中创建一个void方法,它将创建一个txt文件并在计算机上写下所有文件名的所有路径。

有一个cmd命令,(dir c:\ /s /b >c:\bla.txt),但我不希望这样。

我怎样才能在C#中做到?

5 个答案:

答案 0 :(得分:6)

查看方法:

不要忘记using的{​​{1}}语句,以便即使抛出异常也会关闭文件句柄

答案 1 :(得分:1)

试试这个:

void GetFiles()
{
    StreamWriter wr = File.CreateText(Server.MapPath("") + "txt1.text");

    DriveInfo[] drive = DriveInfo.GetDrives();
    for (long count = 0; count < drive.LongLength; count++)
    {
        string[] dir = Directory.GetDirectories(drive.GetValue(count).ToString(), "*", SearchOption.AllDirectories);
        for (long dr = 0; dr < dir.LongLength; dr++)
        {
            string[] file = Directory.GetFiles(dir.GetValue(dr).ToString(), "*", SearchOption.AllDirectories);
            for (long fl = 0; fl < file.LongLength; fl++)
            {
                wr.WriteLine(file.GetValue(fl));
            }
        }
    }
}

答案 2 :(得分:1)

代码如下。它是在Mac OS X上的Mono上编写的,因此您需要更改目录。此外,如果您没有并在管理员下运行,它可能会在某些目录中抛出各种错误。

class MainClass
{
    public static void Main (string[] args)
    {
        WritePaths("files.txt", "/", true);
    }

    public static void WritePaths(string fileName, string directory, bool recursive)
    {
        try
        {
            string[] files = Directory.GetFiles(directory, "*", SearchOption.AllDirectories);
            using(StreamWriter sw = new StreamWriter(fileName))
            {
                foreach(string file in files)
                {
                    sw.WriteLine(file); 
                }
            }
        }
        catch(Exception ex)
        {
            Console.WriteLine("Exception: " + ex.Message);
        }           
    }
}

根据其他答案,我修改了我的方法以使用较新的Directory.EnumerateFiles。我更喜欢这个版本。

    public static void WritePaths(string fileName, string directory)
    {
        try
        {
            using(StreamWriter sw = new StreamWriter(fileName))
            {
                foreach (string f in Directory.EnumerateFiles(directory, "*", SearchOption.AllDirectories))
                {
                    sw.WriteLine(f);
                }
            }
        }
        catch(Exception ex)
        {
            Console.WriteLine("Exception: " + ex.Message);
        }           
    }

答案 3 :(得分:0)

我建议写一个递归方法,虽然它不能是一个void方法。 我会迭代一个给定的路径说C:。或者使用Drives System.IO类取出所有驱动器并传递给该方法。 然后在方法中,我将迭代并删除目录和子目录中的文件名。

答案 4 :(得分:0)

  

有一个cmd命令,(dir c:\ /s /b >c:\bla.txt),但我不希望这样。

您不希望手动键入该命令并在Windows控制台中执行它,或者您不想使用 DIR 命令(您希望用C#自己实现?

如果您只是想要一个为您处理手动输入的C#程序,您可以使用C#启动进程并运行内置DIR命令。请参阅Process.Start

Process.Start("cmd", @"/c dir c:\ /s /b >c:\bla.txt");

简单,易读,而且我100%确定没有错误。那为什么不呢?