C# 从位于不同位置的多个类型文件读入
在使用StreamReader的C中,我必须从多个文件中提取数据。这是我到目前为止的代码。这并不完全正确,我必须更具体地说,并添加更多的内容。我需要根据它们的共同日期和时间选择各种单独的文件。因此,仅选择具有共同输入日期和时间的文件进行提取。问题是文件的类型不同,例如文本、xml和html,它们可能位于不同的位置。我必须同时显示所有提取的数据。任何帮助都将不胜感激。多谢各位C# 从位于不同位置的多个类型文件读入,c#,streamreader,C#,Streamreader,在使用StreamReader的C中,我必须从多个文件中提取数据。这是我到目前为止的代码。这并不完全正确,我必须更具体地说,并添加更多的内容。我需要根据它们的共同日期和时间选择各种单独的文件。因此,仅选择具有共同输入日期和时间的文件进行提取。问题是文件的类型不同,例如文本、xml和html,它们可能位于不同的位置。我必须同时显示所有提取的数据。任何帮助都将不胜感激。多谢各位 private void btnLoad_Click(object sender, RoutedEventArgs
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);
}
}
如果我没有弄错,您需要提取文件信息创建日期等 为此使用FileInfo类: 根据您的评论,信息实际上在文件中。这里没有什么神奇之处:您必须一个接一个地打开每个文件,并解析其内容以找到所需的信息。如果它是XML文件,C中有各种类可以帮助您处理它,例如
这将获得一个文件列表,然后将FileInfo对象传递给一个方法来读取内容,在这个方法中,您需要添加逻辑来确定是否有正确的文件。如果是这样,那么开始将行附加到lblDisplay。使用@IdahoSixString的答案获取文件
IEnumerable<FileInfo> files = Directory.EnumerateFiles(...
没有StreamReader或FileReader,没有对文件结尾进行测试,没有显式打开或关闭文件
如果您知道文件的不同位置和文件夹,请将它们存储在一个数组中并添加一个循环
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);
}
}
}
你的问题要更具体一些。您在读取xml文件或html文件时有困难吗?一起展示是什么意思?您打算如何显示结果?在未格式化的文本框中,作为富文本,在word文档中,其他。。。?为什么不同的地方是个问题?File.ReadAllLines不够好吗?StreamReader将从流中读取。文件不是流-请使用FileStream类围绕单个文件创建流。您无法创建指向多个文件的流。我可以从一个文件中读取没有问题。我试图做的是从多个文件中读取数据,并通过在标签中一起输出来显示每个文件中的数据。它显示在什么位置并不重要,无论是文本框还是标签,问题是同时显示多个文件中的数据。谢谢你,乔,我没有意识到流不能指向不同的文件。是的,我错了,StreamReader确实可以读取文件。嗨。谢谢你的评论。实际上,我想提取所有信息,但目标文件基于一个或多个公共日期和时间。因此,我需要能够从中读取日期和时间,然后选择它们并显示它们的所有数据组合。另一个困难是,它们可能位于不同的位置。所以,我有点卡住了!不同的位置是否已知,或者您是否需要搜索算法来递归搜索文件夹?如果您查找的日期/时间在文件内容中,并且您没有提及文件的创建日期,那么您必须逐个打开和解析每个文件,并在关闭每个文件之前存储所需的数据。嗨,奥利弗,我知道各种文件的位置。嗨,乔,是的,日期时间在文件内容内。谢谢,你好,爱达荷州。谢谢你,但很抱歉,我一定没有解释清楚。日期时间在文件本身内,而不是文件的创建日期时间。这将帮助您首先获得文件列表。然后,您需要打开每个文件本身并读取其内容,以检查您是否拥有正确的信息。我将很快更新我的答案,以显示可能的解决方案。谢谢您。这有帮助!:-ParseFile不返回字符串。@YairNevet现在返回一个stringHi Oliver。谢谢,但这给我带来了foreach adn File.ReadLines文件的一些错误,例如“无法将type System.IO.FileInfo转换为string”和“与System.IO.File.ReadLines字符串匹配的最佳重载方法有一些无效参数”。如果目录.EnumerateFiles。。。为您提供文件信息而不是字符串,请改为写入File.ReadLinesfile.FullName。我更新了代码示例
foreach (FileInfo fileInfo in files) {
foreach (string line in File.ReadLines(fileInfo.FullName)) {
lbDisplay.Items.Add(line);
}
}
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);
}
}
}