Каждый раз записывает новый файл на c#

#c# #.net #file

#c# #.net #файл

Вопрос:

Я работаю над консольным приложением 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 amp;amp; ds.Tables["Reply"] != null amp;amp; 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 amp;amp; ds.Tables["Names"].Rows.Count > 0)
        {
            uniqueKey = ds.Tables["Names"].Rows[0]["name"].ToString();
        }

        if (ds.Tables["NameType"] != null amp;amp; ds.Tables["NameType"].Rows.Count > 0)
        {
            refNo = ds.Tables["NameType"].Rows[0]["name"].ToString();
        }

        if (ds.Tables["Meter"] != null amp;amp; 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);
  

Как я могу создавать новый файл каждый раз?

Любая помощь будет высоко оценена.

Комментарии:

1. Измените значение filePath .

2. итак, удалите файл, если он существует, и сохраните файл?#

3. @BugFinder нет, я не хочу удалять файл

4. Вы не сказали ничего, кроме того, что хотите новый файл.. откуда нам знать

5. Используйте File.CreateText вместо File.AppendAllText

Ответ №1:

Создайте уникальный путь к файлу. Что-то вроде этого:

 var filePath =$"{folderPath}txtFile_{Guid.NewGuid()}"; 
  

Это сделает файл всегда уникальным. Идентификатор guid также может быть заменен чем-то более значимым, например, меткой времени Unix.

Ответ №2:

Каждый раз создавайте пользовательское имя файла и используйте 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. Я попробовал ваш код и сделал следующее File.WriteAllText(filePath, log); . Журнал создается с отметкой даты и времени, но включает только последнюю запись.

2. @Faisal: Да, log у источника будет только последнее значение, вы ввели значения в вызываемый список ls , вместо этого используйте его, для log которого будет содержать все журналы

3. ранее при использовании File.AppendAllText все журналы были в файле, а не в последнем

4. Как вы перебираете строки таблицы или узлы xml?

Ответ №3:

просто сделайте свой путь к файлу уникальным, например, с помощью тиков

 var filePath = $"app-log-{DateTime.Now.Ticks:X}.log";