在使用StreamReader的C#中,我必须从多个文件中提取数据。这是我到目前为止的代码。它不完全正确,我必须更加具体,并添加更多。我需要根据它们共有的日期和时间选择各种单独的文件。因此,仅选择具有共同输入日期和时间的文件进行提取。问题是文件是不同的类型,例如text,xml和html,它们可能位于不同的位置。我必须一起显示所有提取的数据。任何帮助将不胜感激。谢谢。
private void btnLoad_Click(object sender, RoutedEventArgs e)
{
try
{
var files = Directory.EnumerateFiles("D:\\path", "*.*", SearchOption.AllDirectories)
.Where(s => s.EndsWith(".txt") || s.EndsWith(".xml"));
using (StreamReader sr = new StreamReader("files")).
{
string line;
while ((line = sr.ReadLine()) != null)
{
lbDisplay.Items.Add(line);
}
}
}
catch (Exception ex)
{
// Let the user know what went wrong
MessageBox.Show("The file could not be read: ");
MessageBox.Show(ex.Message);
}
}
答案 0 :(得分:2)
IEnumerable<string> fileContents = Directory.EnumerateFiles("E:", "*.*", SearchOption.TopDirectoryOnly)
.Select(x => new FileInfo(x))
.Where(x => x.CreationTime > DateTime.Now.AddHours(-1) || x.LastWriteTime > DateTime.Now.AddHours(-1))
.Where(x => x.Extension == ".xml" || x.Extension == ".txt")
.Select(file => ParseFile(file));
private string ParseFile(FileInfo file)
{
using (StreamReader sr = new StreamReader(file.FullName))
{
string line;
string endResult;
while ((line = sr.ReadLine()) != null)
{
//Logic here to determine if this is the correct file and append accordingly
endResult += line + Environment.Newline;
}
return endResult;
}
}
这将获得一个文件列表,然后将FileInfo对象传递给一个方法来读取内容,在这里您需要添加逻辑以确定您是否拥有正确的文件。如果是,则开始将您的行附加到lblDisplay。
答案 1 :(得分:1)
使用@ IdahoSixString的答案获取文件
IEnumerable<FileInfo> files = Directory.EnumerateFiles(...
现在迭代它们并得到每条线的
foreach (FileInfo fileInfo in files) {
foreach (string line in File.ReadLines(fileInfo.FullName)) {
lbDisplay.Items.Add(line);
}
}
没有StreamReaders或FileReaders,没有测试文件结尾,没有明确打开或关闭文件。
如果您知道文件的不同位置(文件夹),请将它们存储在数组中并添加循环
var folders = new string[] { "C:\folder1", "C:\folder2", ... };
foreach (string folder in folders) {
IEnumerable<FileInfo> files = Directory
.EnumerateFiles(folder, "*.*", SearchOption.TopDirectoryOnly)
.Select(... ;
foreach (FileInfo fileInfo in files) {
foreach (string line in File.ReadLines(fileInfo.FullName)) {
lbDisplay.Items.Add(line);
}
}
}
答案 2 :(得分:0)
如果我做对了,你想提取文件信息(创建日期等)。
使用FileInfo类:
https://msdn.microsoft.com/en-us/library/system.io.fileinfo%28v=vs.110%29.aspx
根据您的评论,信息实际上在文件中。这里没有魔力:你必须一个接一个地打开每个文件,并解析其内容以找到你需要的信息。如果它是一个XML文件,C#中有各种类可以帮助您,例如XMLReader。