2015-04-01 47 views
-1

如何讀取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

回答

0

從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

1

類似下面將讀取指定的網絡目錄中的所有文件.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

2

這是我知道讓所有的數據項進行最簡單的方法:

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

然後,你可以保存數據庫的字符串數組。

相關問題