Каждый раз пишет новый файл в C # - PullRequest
0 голосов
/ 11 апреля 2019

Я работаю над консольным приложением 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 голосов
/ 11 апреля 2019

Создайте уникальный путь к файлу. Примерно так:

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

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

0 голосов
/ 11 апреля 2019

просто сделайте ваш filePath уникальным, например, используя Ticks

var filePath = $"app-log-{DateTime.Now.Ticks:X}.log";
0 голосов
/ 11 апреля 2019

Создайте пользовательское имя файла каждый раз и используйте 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...