我正在开发一个小命令行实用程序来从目录中删除文件。用户可以选择在命令行指定路径或从文本文件中读取路径。
以下是示例文本输入:
C:\Users\MrRobot\Desktop\Delete
C:\Users\MrRobot\Desktop\Erase
C:\Users\MrRobot\Desktop\Test
我的代码:
class Program
{
public static void Main(string[] args)
{
Console.WriteLine("Number of command line parameters = {0}", args.Length);
if(args[0] == "-tpath:"){
clearPath(args[1]);
}
else
if(args[0] == "-treadtxt:"){
readFromText(args[1]);
}
}
public static void clearPath(string path)
{
if(Directory.Exists(path)){
int directoryCount = Directory.GetDirectories(path).Length;
if(directoryCount > 0){
DirectoryInfo di = new DirectoryInfo(path);
foreach (DirectoryInfo dir in di.GetDirectories())
{
dir.Delete(true);
}
}
else{
Console.WriteLine("No Subdirectories to Remove");
}
int fileCount = Directory.GetFiles(path).Length;
if(fileCount > 0){
System.IO.DirectoryInfo di = new DirectoryInfo(path);
foreach (FileInfo file in di.GetFiles())
{
file.Delete();
}
}
else{
Console.WriteLine("No Files to Remove");
}
}
else{
Console.WriteLine("Path Doesn't Exist {0}", path);
}
}
public static void readFromText(string pathtotext)
{
try
{ // Open the text file using a stream reader.
using (StreamReader sr = new StreamReader(pathtotext))
{
// Read the stream to a string, and write the string to the console.
string line = sr.ReadToEnd();
clearPath(line);
}
}
catch (Exception e)
{
Console.WriteLine("The file could not be read:");
Console.WriteLine(e.Message);
}
}
}
}
我的问题:
当从文本文件中读取时,它表示第一条路径不存在,并打印出提示的所有路径,尽管我没有Console.WriteLine()
。但是,如果我插入这些相同的路径并调用-tPath:它将起作用。我的问题似乎出现在readFromText()
我似乎无法弄明白。
答案 0 :(得分:3)
这是问题所在:
string line = sr.ReadToEnd();
这不是读取数据的行 - 它一次性读取整个文件。您的clearPath
方法期望其参数是单个路径,而不是粘在一起的一堆线。您查看所有路径的原因是clearPath
正在被调用(所有内容都在一个调用中),并且#34;粘在一起"找不到路径,并在Console.WriteLine("Path Doesn't Exist {0}", path);
打印输入。
我怀疑你应该使用类似的东西:
var lines = File.ReadAllLines(pathtotext);
foreach (var line in lines)
{
clearPath(pathtotext);
}