我正在使用C#控制台应用程序。我正在将一些数据保存到文本文件中。每次运行程序时,它会将数据保存到该文件中,而不会覆盖该文件。现在,我想在每次发送请求/运行新程序时将数据保存到一个新文件中。
var result = XmlDecode(soapResult);
XDocument doc = XDocument.Parse(result);
XmlReader read = doc.CreateReader();
DataSet ds = new DataSet();
ds.ReadXml(read);
read.Close();
if (ds.Tables.Count > 0 && ds.Tables["Reply"] != null && ds.Tables["Reply"].Rows.Count > 0)
{
string refNo = string.Empty;
string uniqueKey = string.Empty;
string meterNo = string.Empty;
List<string> ls = new List<string>();
if (ds.Tables["Reply"].Rows[0][0].ToString().ToUpper() == "OK")
{
if (ds.Tables["Names"] != null && ds.Tables["Names"].Rows.Count > 0)
{
uniqueKey = ds.Tables["Names"].Rows[0]["name"].ToString();
}
if (ds.Tables["NameType"] != null && ds.Tables["NameType"].Rows.Count > 0)
{
refNo = ds.Tables["NameType"].Rows[0]["name"].ToString();
}
if (ds.Tables["Meter"] != null && ds.Tables["Meter"].Rows.Count > 0)
{
if (ds.Tables["Meter"].Columns.Contains("mRID"))
{
meterNo = ds.Tables["Meter"].Rows[0]["mRID"].ToString();
processedRec++;
}
}
}
log = uniqueKey + " | " + refNo + " | " + meterNo + " | " + Environment.NewLine;
ls.Add(log);
}
File.AppendAllText(filePath, log);
如何每次都创建一个新文件?
任何帮助将不胜感激。
答案 0 :(得分:0)
每次都创建一个自定义文件名,并使用File.WriteAllText
(这将创建一个新文件,将内容写入该文件,然后关闭该文件。如果目标文件已存在,则它将被覆盖。)代替File.AppendAllText
在您的情况下,filePath
应该是动态的,可以这样构造:
string basePath = ""; // this should be path to your directory in which you wanted to create the output files
string extension = ".xml";
string fileName = String.Format("{0}{1}{2}","MyFile",DateTime.Now.ToString("ddMMyy_hhmmss"),extension );
string filePath = Path.Combine(basePath,fileName);
在上面的代码段中,DateTime.Now.ToString("ddMMyy_hhmmss")
是当前时间(在代码执行时),每次执行都不同,因此文件名在每次运行中都不同。以后,您可以根据这些通用模式搜索/分组文件。
还有一件事:
在代码中,您使用了变量List<string> ls
,该变量填充了所有日志,并且您正在将log
的内容写入仅包含最后一条记录的文件。因此,编写内容的声明应为:
File.WriteAllText(filePath, String.Join("\n",log));
甚至简单地
File.WriteAllLines(filePath, log);
答案 1 :(得分:0)
制作一个唯一的filePath。像这样:
var filePath =$"{folderPath}\txtFile_{Guid.NewGuid()}";
这将使文件始终唯一。 guid也可以用更有意义的东西代替,例如Unix Timestamp。
答案 2 :(得分:0)
例如通过使用Ticks来使您的filePath唯一
var filePath = $"app-log-{DateTime.Now.Ticks:X}.log";