【发布时间】:2018-08-21 14:14:19
【问题描述】:
我目前正在创建一个简短的控制台应用程序来读取多个子文件夹中的特定文件。该文件在所有目录中都具有相同的名称,因此将它们全部移动到一个目录并重命名它们将是一个巨大的麻烦(这些文件中有超过 365 个。它们每天都会自动创建一个新名称,并返回一些年)。但是,它们都在同一个主文件夹下。
我已经调查过Read all files in directory sub folders。我知道我能够搜索每个单独的子文件夹并查看所有文件(我能够在我的 foreach 语句中找到的每个文件的控制台中显示他们的 fileName。
到目前为止的代码:
static void Main(string[] args)
{
string readLine = string.Empty;
var dir = new DirectoryInfo(@"C:\MotherDir\");
// foreach loop to go through each subfolder to find FileINeed.txt
foreach (var file in dir.EnumerateFiles("FileINeed.txt", SearchOption.AllDirectories))
{
//I get an error here: "System.IO.FileNotFoundException: 'Could not file file-'"
using (StreamReader sr = new StreamReader(file.ToString())) //this is using the wrong directory, not the one set previously (var dir)
{
while (!sr.EndOfStream)
{
readLine = sr.ReadLine();
ProcessFiles(file.ToString());
}
}
}
Console.WriteLine("Finished.");
Console.ReadKey(); //Gets pause at the end of the program
}
// Method to pass files through in order to search for specific string
static fileEntry ProcessFiles(string fileName)
{
fileEntry inputFiles = new fileEntry();
string fileString = string.Empty;
string readLine;
using (StreamReader sr = new StreamReader(fileName))
{
while (!sr.EndOfStream)
{
readLine = sr.ReadLine();
if (readLine.Length < 1)
{
}
if (readLine.Contains("RUN DATE: "))
{
Console.Write("RUN DATE: ");
Console.WriteLine(readLine);
}
if (readLine.Contains("1234567"))
{
Console.Write("Found this: ");
Console.WriteLine(readLine);
}
if (readLine.Contains("7654321"))
{
Console.Write("Found this: ");
Console.WriteLine(readLine);
}
if (readLine.Contains("1346785"))
{
Console.Write("Found this: ");
Console.WriteLine(readLine);
}
if (readLine.Contains("2589632"))
{
Console.Write("Found this: ");
Console.WriteLine(readLine);
}
if (readLine.Contains("12587412"))
{
Console.Write("Found this: ");
Console.WriteLine(readLine);
}
}
}
inputFiles.FileName = fileString;
return inputFiles;
}
public class fileEntry
{
//stores file names and datetimes
public string FileName { get; set; }
public DateTime FileDate { get; set; }
}
对于寻找特定字符串的糟糕的 if 语句,我深表歉意,我试图使用 switch/case 语句但无法使其工作。
如果它找到其中一个字符串,我只需要将它输出到控制台窗口(我知道我正在尝试输出整个readLine)。该程序的目的是查看这些字符串是否存在于正在处理的文件中。
我对 C# 还很陌生,这是我从头开始编写的第一个有价值的程序之一。所以我为我仍在学习的糟糕的编码实践(如果有的话)道歉!如果您有任何建议或帮助,我们将不胜感激!如果我需要澄清任何事情,请告诉我!
提前谢谢你!
【问题讨论】:
-
@Archer ,请参阅代码中的 cmets。我目前在
using (StreamReader sr = new StreamReader(file.ToString())上遇到错误。到目前为止,我的文件没有得到处理。 -
是的,谢谢 - 我看到并删除了我的评论。如果您在代码之外解释问题所在可能会更好,但至少它在那里:)
标签: c#