Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从位于不同位置的多个类型文件读入_C#_Streamreader - Fatal编程技术网

C# 从位于不同位置的多个类型文件读入

C# 从位于不同位置的多个类型文件读入,c#,streamreader,C#,Streamreader,在使用StreamReader的C中,我必须从多个文件中提取数据。这是我到目前为止的代码。这并不完全正确,我必须更具体地说,并添加更多的内容。我需要根据它们的共同日期和时间选择各种单独的文件。因此,仅选择具有共同输入日期和时间的文件进行提取。问题是文件的类型不同,例如文本、xml和html,它们可能位于不同的位置。我必须同时显示所有提取的数据。任何帮助都将不胜感激。多谢各位 private void btnLoad_Click(object sender, RoutedEventArgs

在使用StreamReader的C中,我必须从多个文件中提取数据。这是我到目前为止的代码。这并不完全正确,我必须更具体地说,并添加更多的内容。我需要根据它们的共同日期和时间选择各种单独的文件。因此,仅选择具有共同输入日期和时间的文件进行提取。问题是文件的类型不同,例如文本、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);
        }
    }

如果我没有弄错,您需要提取文件信息创建日期等

为此使用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);
        }
    }
}