2017-08-18 8 views
0

SmartXLSライブラリを使用して、指定されたフォルダから複数のCSVファイルを読み込むコンソールアプリケーションを作成しています。私は1つのファイルから読むことができますが、複数のファイルを読む方法を理解することはできません。親切に、これで私を助けてください。以下は複数の.CSVファイルをC#のフォルダから読み取るには?

public void GetData() 
     { 

      int count = 0; 

      DeskTokens = new List<Token>(); 

      string directory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); 
      string path = Path.Combine(directory, @"C:\projects\Product_Usage_Year.csv"); 

      SmartXLS.WorkBook WB = new WorkBook(); 
      WB.readCSV(path); 

      DataTable dt = WB.ExportDataTable(); 

      string CurrentType = string.Empty; 
      string CurrentCategory = string.Empty; 

      DataRow dr; 
      for (int i = 1; i < dt.Rows.Count; i++) 
      { 
       dr = dt.Rows[i]; 
       var tkn = new Token(); 

       tkn.Product_name = dr[0].ToString(); 
       tkn.Product_Version = dr[1].ToString(); 
       tkn.Userid = dr[2].ToString(); 
       tkn.User_name = dr[3].ToString(); 

       DeskTokens.Add(tkn); 
       count++; 
       Console.WriteLine("Read : " + count); 

       Console.WriteLine(" Reading : " + tkn.Product_name + "," + tkn.Product_Version + "," + tkn.Userid + "," + tkn.User_name); 

      } 
     } 
+0

サイクルで 'GetData'を呼び出して、そこに' filePath'パラメータを渡すのはどうですか? –

+0

あるファイルから読み込むことができるコードを持っていれば、それをただちに再利用して(メソッドやループに入れて)、すべてのファイルから読み込みます。 – juharr

答えて

2

"path"すべてのCSVファイルが存在するディレクトリです。

var files = Directory.EnumerateFiles("path", "*.csv"); 
foreach (string file in files) 
{ 
    using (FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read)) 
    { 
     // Use the file stream to read data. 
    } 
} 
+1

これは、CSVデータを解析するためにCSVHelperというライブラリでも使用できます – DOMZE

+0

完璧!!私のために働いた。ありがとうございます:) @Sach – Rev4

+0

あなたは大歓迎です!そして、ちょうど参考にして、あなたが多数のファイルを扱わなければならない場合、 'Directory.EnumerateFiles()'は 'Directory.GetFiles()'より高速です。 [理由はこちら](https://stackoverflow.com/a/5669635/302248) – Sach

0

使用Directory.GetFiles

// Gets only .csv files 
string[] csvFiles = Directory.GetFiles(directoryPath, "*.csv"); 

と、このようなループの書き込み:

foreach(file in csvFiles) 
{ 
    getData(file); 
    // ... 
} 

をし、また、あなたがgetData方法でパスパラメータを取る必要があります。

public void GetData(string path) 
     { 

      int count = 0; 

      DeskTokens = new List<Token>(); 

      SmartXLS.WorkBook WB = new WorkBook(); 
      WB.readCSV(path); 

      DataTable dt = WB.ExportDataTable(); 

      string CurrentType = string.Empty; 
      string CurrentCategory = string.Empty; 

      DataRow dr; 
      for (int i = 1; i < dt.Rows.Count; i++) 
      { 
       dr = dt.Rows[i]; 
       var tkn = new Token(); 

       tkn.Product_name = dr[0].ToString(); 
       tkn.Product_Version = dr[1].ToString(); 
       tkn.Userid = dr[2].ToString(); 
       tkn.User_name = dr[3].ToString(); 

       DeskTokens.Add(tkn); 
       count++; 
       Console.WriteLine("Read : " + count); 

       Console.WriteLine(" Reading : " + tkn.Product_name + "," + tkn.Product_Version + "," + tkn.Userid + "," + tkn.User_name); 

      } 
     } 

私はあなたに役立つことを願っています:)

関連する問題