在 WinForms 应用程序中读取网络路径中的所有文本文件

Reading all text files in a network path in a WinForms app

如何在 C# Winforms 中读取网络路径中的所有文本文件?。文本文件名称总是在变化。

示例:

每个文本文件打开时的格式为:

Some Text
Some Text
Some Text
Some Text

[data start]
"Data1"|"Data2"|"Data3"|"Data4"|"Data5"|"Data5"|"Data6"
[data end]

我也想忽略文本文件的 "some text" 部分,继续在 [data start] 行读取文本文件并在 [data end] 行结束,然后最后执行查询数据库,然后将从文本文件接收到的数据插入到 table.

来自 MSDN 网站:https://msdn.microsoft.com/en-us/library/dd997370%28v=vs.110%29.aspx

这将枚举 c:\ 目录并为您提供每个 .txt 文件的列表(我去掉了 Where 子句)。

using System;
using System.IO;
using System.Linq;

class Program
{
    static void Main(string[] args)
    {
        try
        {
            var files = from file in Directory.EnumerateFiles(@"c:\", "*.txt", SearchOption.AllDirectories)
                        from line in File.ReadLines(file)
                        select new
                        {
                            File = file,
                            Line = line
                        };

            foreach (var f in files)
            {
                Console.WriteLine("{0}\t{1}", f.File, f.Line);
            }
            Console.WriteLine("{0} files found.", files.Count().ToString());
        }
        catch (UnauthorizedAccessException UAEx)
        {
            Console.WriteLine(UAEx.Message);
        }
        catch (PathTooLongException PathEx)
        {
            Console.WriteLine(PathEx.Message);
        }
    }
}

浏览每个文件并阅读 "DATA" 信息。如果您将其设为单独的函数,请确保为 'f' 传递参数。

        try
        {
            foreach (var f in files)
            {
                using (StreamReader sr = new StreamReader(f.file))
                {
                    string readLine;
                    do
                    {
                        readLine = sr.ReadLine();
                        string[] readLineSplit = readLine.Split('|');
                        if (readLineSplit.Length > 1)
                        {
                            //Make call to database for query and update it with the readSplit.
                        }

                    } while (!sr.EndOfStream);
                }
            }
        }

        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }

我建议创建一个关于如何进行查询和更新数据库的新线程。您没有提及它是什么数据库,table 结构或其他。

注意安全,

-罗布

类似下面的内容将读取指定网络目录中的所有 .txt 文件并跳过所有行,直到它到达文本文件中的 [data start]

using System.IO;
using System.Linq;

string networkPath = "\\Network\Path";
foreach (string path in Directory.GetFiles(networkPath, "*.txt"))
{
    foreach (string line in File.ReadAllLines(path).SkipWhile(x => !x.Contains("[data start]")))
    {
         //Do something with line here
    }
}

这是我知道的获取所有数据项的最简单方法:

string[] data = 
    Directory
        .EnumerateFiles(@"Path\To\Folder", "*.txt")
        .SelectMany(f =>
            File
                .ReadAllLines(f)
                .SkipWhile(l => l != "[data start]")
                .Skip(1)
                .TakeWhile(l => l != "[data end]")
                .SelectMany(l => l.Split('|')))
        .ToArray();

我得到这样的结果:

然后您可以将字符串数组保存到数据库中。