保存数据为CSV文件
在一些项目中,有一些动态数据保存的需求,保存为CSV。
解决方法如下:
引用:
using System;
using System.Data;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Threading.Tasks;
using System.Diagnostics;
using System.Windows.Forms;
-----------------------------------------------------------
private object CsvCodeData_Lock = new object();
/// <summary>
/// 保存数据为CSV文件
/// </summary>
/// <param name="ListData">数据</param>
/// <param name="Header">文件头</param>
/// <param name="FilePath">文件路径</param>
/// <param name="fileType">文件分类</param>
/// <returns></returns>
public bool CsvDataSave(List<SortedList> ListData, SortedList Header, string FilePath, string fileType)
{
bool Re = false;
if (!Directory.Exists(FilePath))
{
Directory.CreateDirectory(FilePath);
}
lock (CsvCodeData_Lock)
{
string dt = DateTime.Now.ToString("yyyy-MM-dd");
string filename = Path.Combine(FilePath, fileType + "-" + dt + ".csv");
// string filename = Path.Combine(CsvCodeFilePath, "电池扫码-" + "-" + dt + ".csv");
StreamWriter sw = null;
try
{
if (!File.Exists(filename))
{
sw = new StreamWriter(filename, false, Encoding.Default);
StringBuilder sb_value = new StringBuilder();
foreach (System.Collections.DictionaryEntry objDE in Header)
{
// sb_field.Append(objDE.Key.ToString() + ",");
sb_value.Append( objDE.Value.ToString() + ",");
}
// sb_field.Remove(sb_field.Length - 1, 1);
sb_value.Remove(sb_value.Length - 1, 1);
sw.WriteLine(sb_value.ToString());
}
else
{
sw = new StreamWriter(filename, true, Encoding.Default);
foreach (SortedList dr in ListData)
{
StringBuilder sb_value2 = new StringBuilder();
foreach (System.Collections.DictionaryEntry objDE in Header)
{
string StrVal = dr[objDE.Key.ToString()].ToString();
sb_value2.Append( StrVal + ",");
}
sb_value2.Remove(sb_value2.Length - 1, 1);
sw.WriteLine(sb_value2.ToString());
}
}
sw.Close();
sw = null;
Re = true;
}
catch (Exception ex)
{
if (sw != null)
{
sw.Close(); sw = null;
}
LogMsg.MsgException(ex.Message, "CsvDataSave");
Re = false;
}
}
return Re;
}