こんにちは、私はcreate multiple CSV files
からDataTable
にsmaller chunks based on size
のapp.config
のキーと値のペアを通過する関数を持っています。以下のコードで特定のサイズのCSVファイルの分割
問題:
- 私は
20
の値を渡すだろうと、それは20kb
のCSVファイルを作成する必要があり、1キロバイトのファイルサイズをハードコーディングしました。現在、同じ値のファイルサイズは5kb
です。 - 最後の左のレコードはファイルを作成していません。
この問題を解決するために助けてください。ありがとう!
コード:
public static void CreateCSVFile(DataTable dt, string CSVFileName)
{
int size = Int32.Parse(ConfigurationManager.AppSettings["FileSize"]);
size *= 1024; //1 KB size
string CSVPath = ConfigurationManager.AppSettings["CSVPath"];
StringBuilder FirstLine = new StringBuilder();
StringBuilder records = new StringBuilder();
int num = 0;
int length = 0;
IEnumerable<string> columnNames = dt.Columns.Cast<DataColumn>().Select(column => column.ColumnName);
FirstLine.AppendLine(string.Join(",", columnNames));
records.AppendLine(FirstLine.ToString());
length += records.ToString().Length;
foreach (DataRow row in dt.Rows)
{
//Putting field values in double quotes
IEnumerable<string> fields = row.ItemArray.Select(field =>
string.Concat("\"", field.ToString().Replace("\"", "\"\""), "\""));
records.AppendLine(string.Join(",", fields));
length += records.ToString().Length;
if (length > size)
{
//Create a new file
num++;
File.WriteAllText(CSVPath + CSVFileName + DateTime.Now.ToString("yyyyMMddHHmmss") + num.ToString("_000") + ".csv", records.ToString());
records.Clear();
length = 0;
records.AppendLine(FirstLine.ToString());
}
}
}
私はむしろ、 'DataTable'から直接指定されたファイルサイズの小さなチャンクに' CSV Files'を直接書きます。私はすべてのレコードを書くことができません。 'If'条件は' length> size'だけを探しているので、最後の左のレコードを残し、それらのレコードのファイルを作成しません。 – sarfarazit08