2016-08-09 4 views
0

現在、この方法では1つのCSVファイルを引用符で囲むことはできますが、ディレクトリ内の600以上のCSVファイルをループして引用符付きの方法を実行しようとしていますそれぞれ。私はこれを効果的に行う方法がわかりません。どんなフィードバックもありがとうございます。以下は引用符 - ディレクトリに600+ CSVファイルを囲むC#

私のコードです:

不正な文字がパスに:

以下
public void QuoteEnclosingCSV() 
    { 
     string fileNamePath = Path.GetTempPath() + @"\Reports\*.csv"; 

     var stringBuilder = new StringBuilder(); 

     foreach (var line in File.ReadAllLines(fileNamePath)) 
     { 
      stringBuilder.AppendLine(string.Format("\"{0}\"", string.Join("\",\"", line.Split(',')))); 
     } 

     File.WriteAllText(string.Format(fileNamePath, Path.GetDirectoryName(fileNamePath)), stringBuilder.ToString()); 

    } 

string marFolder = Path.GetTempPath() + @"\Reports\"; 

var dir = new DirectoryInfo(marFolder); 

foreach (var file in dir.EnumerateFiles("*.csv")) 
{ 
     QuoteEnclosingCSV(); 
} 

は、私が受けていますエラーです。

答えて

1

この謎を解く最初のステップは、エラーメッセージが私に教えようとしていることを推測することです。私の最初の推測は、パスには違法な文字が含まれていると言うことです。エラーの原因となった文字列を確認するために停止しましたか?

私はあなたを紹介します:あなたはFile.ReadAllLines()に渡すパスをだ

C:\Users\YoungStamos\AppData\Local\Temp\\Reports\*.csv 

を。そのメソッドへの単一の引数は、の1つのファイルへのパスです。ワイルドカードなので、Windowsのファイル名にアスタリスク(*)を付けることはできません。

あなたがしようとしているように見えるのは、パラメータをQuoteEnclosingCSV()に渡すことです。このループでは、各ファイルを慎重にリストしますが、それらのいずれかについてはQuoteEnclosingCSV()とは決して言いません。

foreach (var file in dir.EnumerateFiles("*.csv")) 
{ 
    QuoteEnclosingCSV(); 
} 

これは、より多くのあなたが望むもののようである:

public void QuoteEnclosingCSV(string fileNamePath) 
{ 
    var stringBuilder = new StringBuilder(); 

    foreach (var line in File.ReadAllLines(fileNamePath)) 
    { 
     stringBuilder.AppendLine(string.Format("\"{0}\"", string.Join("\",\"", line.Split(',')))); 
    } 

    // I don't know what string.Format() is meant to do here; I'm guessing your guess is 
    // as good as mine, so I'm eliminating it. 
    //File.WriteAllText(string.Format(fileNamePath, Path.GetDirectoryName(fileNamePath)), stringBuilder.ToString()); 

    File.WriteAllText(fileNamePath, stringBuilder.ToString()); 
} 

そして、このようにそれを呼び出す:これは完全に働いた

string marFolder = Path.Combine(Path.GetTempPath(), "Reports"); 

var dir = new DirectoryInfo(marFolder); 

foreach (var fileInfo in dir.EnumerateFiles("*.csv")) 
{ 
    QuoteEnclosingCSV(fileInfo.FullName); 
} 
+0

!私は十分にあなたに感謝できません! – YoungStamos

関連する問題