每次在C#中写入新文件

时间:2019-04-11 13:06:47

标签: c# .net file

我正在使用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);

如何每次都创建一个新文件?

任何帮助将不胜感激。

3 个答案:

答案 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";