我有一个Winforms程序,需要将数据点记录到.CSV
文件中。它相当简单,日期/时间和双倍(数据),然后转到下一行。
这是我到目前为止所做的事情(没有工作,我收到一条错误,说文件正忙/已经打开 - 但是,它是空的)
if (!Directory.Exists(SavePath.Text + "\\LOG"))
Directory.CreateDirectory(SavePath.Text + "\\LOG");
string LogFileName = SavePath.Text + "\\LOG\\Seeing-Log-" + TimeNow.ToString("yyyy-MM-dd") + ".csv";
if (!File.Exists(LogFileName))
File.Create(LogFileName);
string LogString = TimeNow.ToString("yyyy-MM-dd-_HH-mm-ss") + "," + FWHM_Value.ToString("F:");
File.AppendAllText(LogFileName, LogString + Environment.NewLine);
这是产生错误的最后一行。
知道我做错了吗?
感谢 史蒂夫
答案 0 :(得分:6)
File.Create
会向刚刚创建的文件返回一个打开的FileStream
。在不存在和不存在的文件中更改代码以使用FileStream
,或者在创建文件后关闭文件:
if (!File.Exists(LogFileName))
File.Create(LogFileName).Close();
但是,当然,如果您查看AppendAllText
的文档:
将指定的字符串追加到文件中,如果该文件尚不存在则创建该文件。
你会发现上述两行完全是冗余的,可以删除:
if (!Directory.Exists(SavePath.Text + "\\LOG"))
Directory.CreateDirectory(SavePath.Text + "\\LOG");
string LogString = TimeNow.ToString("yyyy-MM-dd-_HH-mm-ss") + "," + FWHM_Value.ToString("F:");
File.AppendAllText(LogFileName, LogString + Environment.NewLine);
答案 1 :(得分:3)
您甚至可以使用免费的looging工具。这是一个' log4net'
您也可以使用此编写csv文件。我假设你目前没有使用日志工具。它将为你工作,没有任何实施代码。
http://element533.blogspot.in/2010/05/writing-to-csv-using-log4net.html
度过美好的一天!!
答案 2 :(得分:2)
答案 3 :(得分:0)
创建文件时会锁定该文件。只需将您的代码更新为:
File.Create(LogFileName).Close();