我想在C#中创建一个void方法,它将创建一个txt文件并在计算机上写下所有文件名的所有路径。
有一个cmd命令,(dir c:\ /s /b >c:\bla.txt
),但我不希望这样。
我怎样才能在C#中做到?
答案 0 :(得分:6)
查看方法:
File.CreateText
(为新创建的文件返回StreamWriter
)TextWriter.WriteLine
(请注意StreamWriter
来自TextWriter
)Directory.EnumerateFiles
(避免在一次通话中阅读所有文件 - 相反,它会让您使用foreach
迭代它们)不要忘记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%确定没有错误。那为什么不呢?