将数据记录到csv文件中,同时防止乱码
。
如何插入一段漂亮的代码片
private static object lockObject = new object();
/// <summary>
/// 数据记录
/// </summary>
/// <param name="fileName">文件路径</param>
/// <param name="totalLength">数据1</param>
/// <param name="lapsNumber">数据2</param>
/// <param name="thickness">数据3</param>
public static void WriteToFile(string fileName, double totalLength, double lapsNumber, double thickness)
{
if (string.IsNullOrWhiteSpace(fileName)) fileName = "数据记录";
// 获取当前时间和日期
DateTime now = DateTime.Now;
string yearStr = now.ToString("yyyy");
string monthStr = now.ToString("M");
string dayStr = now.ToString("d");
// 构造文件路径
string folderPath = Path.Combine(@"D:\数据记录", yearStr, monthStr, dayStr);
string filePath = Path.Combine(folderPath, fileName + ".csv");
// 检查文件夹是否存在,不存在则创建新文件夹
if (!Directory.Exists(folderPath))
{
Directory.CreateDirectory(folderPath);
}
// 检查文件是否存在,不存在则创建新文件并添加表头
if (!File.Exists(filePath))
{
if (!File.Exists(filePath))
{
using (var sw = new StreamWriter(filePath, true, System.Text.Encoding.UTF8))
{
sw.WriteLine("时间,总长,圈数,厚度"); // 添加表头,上面的格式可以防止excel打开时表头不乱码
}
}
}
try
{
// 使用 lock 关键字来确保同一时间只有一个线程可以写入文件
lock (lockObject)
{
// 获取当前时间的字符串表示
string timeStr = now.ToString("HH-mm-ss");
// 写入新的一行数据
using (StreamWriter sw = File.AppendText(filePath))
{
sw.WriteLine("{0},{1},{2},{3}", timeStr, totalLength, lapsNumber, thickness);
}
}
}
catch (IOException ex)
{
// 文件被占用或磁盘空间不足等原因导致写入文件失败
Console.WriteLine("写入文件失败:{0}", ex.Message);
// 在此处可以进行相应的处理,如记录日志、重试等操作
}
}