InitializeComponent();
conDB = new csvfile();
conDB.Path = "E:\\BR_AttendanceDownloadLogs" +
DateTime.Today.ToString("yyyyMMdd") + ".csv";
fillCombo();
作为编程的初学者,第一次在c#中对csv文件进行CRUD。我指的是这个链接:https://social.msdn.microsoft.com/Forums/en-US/27a98772-2dc6-4197-9f75-6cc119d4a88a/how-to-edit-a-line-from-a-text-file-using-c?forum=Vsexpressvcs我找到了我的源代码,对我的程序非常有用。但它并不满足我的特殊满意度。我想从中添加标题。是的,我使用此代码成功添加了标题。
String newFileName = "E:\\BR_AttendanceDownloadLogs" +
DateTime.Today.ToString("yyyyMMdd") + ".csv";
string clientHeader = "\"EmployeeCode\"" + ",\"" + "Date" + "\",\""+
"Time" + "\",\"" + "Type" + "\",\"" + "Remarks" + "\"" +
Environment.NewLine;
File.WriteAllText(newFileName, clientHeader);
conDB.InsertEntrie(txtidno.Text, DatePicker.Text, TimePicker.Text,
cmbtype.Text, txtremarks.Text);
//txtID.Text = Convert.ToString(conDB.Entries()-1);
txtvalue = Convert.ToString(conDB.Entries() - 1);
fillCombo();
txtidno.Text = "";
DatePicker.Text = "";
TimePicker.Text = "";
cmbtype.Text = "";
txtremarks.Text = "";
但是在成功添加我的标题之后: “EmployeeCode”, “日期”, “时间”, “类型”, “备注” 代码流被标头中的这种类型的字段感染。注意!我改变格式就像我的标题形式一样。读取csv文件中的行的其余函数受我的标题影响。它返回到不需要的错误。希望有人能救我到我的错误之岛。
答案 0 :(得分:1)
您可以使用更简洁的File.AppendAllText替换所有StreamWriter代码,并将您的字符串连接替换为interpolated string。
这些更改将导致更干净的InsertEntry方法
public bool InsertEntry(string idnumber, string date, string time, string type, string remarks)
{
try
{
string line = $"\"{idnumber}\",\"{date}\",\"{time}\",\"{type}\",\"{remarks}\"{Environment.NewLine}";
File.AppendAllText(data_path, line);
return true;
}
catch (Exception ee)
{
string temp = ee.Message;
return false;
}
}
当然,button1单击应该只写一次标题,而不是每次单击它。为避免这种情况发生,您需要在编写标题之前检查文件是否存在。
String newFileName = @"E:\BR_AttendanceDownloadLogs" +
DateTime.Today.ToString("yyyyMMdd") + ".csv");
if(!File.Exists(newFileName))
{
string clientHeader = $"\"EmployeeCode\",\"Date\",\"Time\",\"Type\",\"Remarks\"{Environment.NewLine}";
File.WriteAllText(newFileName, clientHeader);
}
答案 1 :(得分:0)
我在史蒂夫的帮助下解决了这个问题。 首先,我将此代码添加到表单中。
InitializeComponent();
conDB = new csvfile();
conDB.Path = "E:\\BR_AttendanceDownloadLogs" +
DateTime.Today.ToString("yyyyMMdd") + ".csv";
String newFileName = "E:\\BR_AttendanceDownloadLogs" +
DateTime.Today.ToString("yyyyMMdd") + ".csv";
if (!File.Exists(newFileName))
{
string clientHeader = "\"EmployeeCode\"" + ",\"" + "Date" + "\",\"" +
"Time" + "\",\"" + "Type" + "\",\"" + "Remarks" + "\"" +
Environment.NewLine;
File.WriteAllText(newFileName, clientHeader);
}
fillCombo();
然后到我的其他类我添加此函数以从用户输入添加条目。感谢史蒂夫。
public bool InsertEntrie(string idnumber, string date, string time, string
type, string remarks)
{
CreateConfigFile();
try
{
string line = $"\"{idnumber}\",\"{date}\",\"{time}\",\"
{type}\",\"{remarks}\"{Environment.NewLine}";
File.AppendAllText(data_path, line);
return true;
}
catch (Exception ee)
{
string temp = ee.Message;
return false;
}
}
然后我在按钮点击事件中将此代码添加到我的表单中。
private void button1_Click(object sender, EventArgs e)
{
conDB.InsertEntrie(txtidno.Text, DatePicker.Text, TimePicker.Text,
cmbtype.Text, txtremarks.Text);
txtvalue = Convert.ToString(conDB.Entries() - 1);
}