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

问题描述:

如何读取C#Winforms中的网络路径中的所有文本文件?文本文件名称一直在变化。读取WinForms应用程序中网络路径中的所有文本文件

例如:

  • ABC-GD09538.txt
  • ADB-JK3949.txt
  • GJD-KGL9495-TXT

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

Some Text 
Some Text 
Some Text 
Some Text 

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

我也想忽略文本文件的“部分文本”部分,并在行[data start]上继续读取文本文件,并在行[data end]结束,最后对数据库执行查询然后将从文本文件接收的数据插入到表中。

+0

到目前为止你得到了哪些代码? – 2015-04-01 02:54:29

+0

目前没有,我只需要一个想法,所以我可以在它上面工作。我不熟悉这种情况。 – 2015-04-01 02:56:18

+1

参见例如'Directory.GetFiles()'和'StreamReader'。更重要的是,你的问题太广泛了。尝试一下。 _Anything_。展示[一个很好的,_minimal_,_complete_代码示例](http://stackoverflow.com/help/mcve),解释代码的作用以及与你想要的不同之处。 – 2015-04-01 03:06:53

从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); 
     } 
    } 
} 

要遍历每个文件并阅读“数据”信息。如果您将此功能设为独立功能,请务必传递'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); 
     } 

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

是安全的,

-Rob

+0

谢谢!@Robert Davidson – 2015-04-01 03:27:39

+0

即时通讯使用mysql数据库 – 2015-04-01 03:36:18

+0

我得到的错误:名称'readSplit'在当前上下文中不存在 – 2015-04-01 03:51:59

类似下面将读取指定的网络目录中的所有文件.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 
    } 
} 
+0

感谢你。 – 2015-04-01 03:27:15

+0

如何显示gridview上的所有文本数据? – 2015-04-01 03:36:11

+1

@KevinRodriguez - 如果您需要在网格视图中显示此信息,请提出一个新问题。你不应该对目前的问题提出新的问题 - 你最终会讨厌每个人。 – Enigmativity 2015-04-01 04:11:28

这是我知道让所有的数据项进行最简单的方法:

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(); 

我得到这种结果:

result

然后,你可以保存数据库的字符串数组。