добавление информации в текстовый файл

#c# #asp.net

#c# #asp.net

Вопрос:

У меня есть веб-сайт, с помощью которого я добавляю записи в базу данных, и информацию, которую я также записываю в файл журнала, который является частью веб-сайта. Информация записывается в файл нормально…единственный вопрос, который у меня есть, заключается в том, как добавлять информацию с каждым вводом в базу данных. На данный момент информация помещается в lof-файл, но при каждой новой вставке в базу данных существующая запись в файле журнала, похоже, перезаписывается и заменяется новой вставкой, так что в файл журнала всегда добавляется только одна запись. Возможно, совет… это код, который я использовал в событии btnClick.

 protected void btnSubmitRating_Click1(object sender, EventArgs e)
{
    int rating = 0;
    try
    {
        if (radRating.Items[0].Selected)
        {
            rating = 1;
        }
        if (radRating.Items[1].Selected)
        {
            rating = 2;
        }
        else if (radRating.Items[2].Selected)
        {
            rating = 3;
        }
        else if (radRating.Items[3].Selected)
        {
            rating = 4;
        }
        else if (radRating.Items[4].Selected)
        {
            rating = 5;
        }
        FileStream rate = new FileStream(Server.MapPath("~/rateBooks.log"), FileMode.Open, FileAccess.ReadWrite);
        BufferedStream bs = new BufferedStream(rate);
        rate.Close();


        StreamWriter sw = new StreamWriter(Server.MapPath("~/rateBooks.log"));
        sw.WriteLine("userName "   txtUserName.Text   " "   "bookTitle "   txtBookTitle.Text   " "   "ISBN "   txtISBN.Text);
        sw.Close();


        Service s = new Service();
        s.bookRatedAdd(txtBookTitle.Text, rating, txtReview.Text, txtISBN.Text, txtUserName.Text);
        btnSubmitRating.Enabled = false;
        radRating.Enabled = false;            
    }
    catch (Exception em)
    {
        lblError.Text = em.Message; 
        //lblError.Text = "This book has already been reviewed by yourself?";
    }
}
  

С уважением

Ответ №1:

Измените весь этот блок кода:

 FileStream rate = new FileStream(Server.MapPath("~/rateBooks.log"), FileMode.Open, FileAccess.ReadWrite);
BufferedStream bs = new BufferedStream(rate);
rate.Close();

StreamWriter sw = new StreamWriter(Server.MapPath("~/rateBooks.log"));
sw.WriteLine("userName "   txtUserName.Text   " "   "bookTitle "   txtBookTitle.Text   " "   "ISBN "   txtISBN.Text);
sw.Close();
  

К этой единственной строке:

 File.AppendAllText(Server.MapPath("~/rateBooks.log"), "userName "   txtUserName.Text   " "   "bookTitle "   txtBookTitle.Text   " "   "ISBN "   txtISBN.Text   Environment.NewLine);
  

Обратите внимание, что теперь я добавляю вручную NewLine к каждой строке.

Ответ №2:

Читать это: Как: Запись в текстовый файл (руководство по программированию на C #)

В этом примере # 4 показано, как добавить к файлу:

 // Example #4: Append new text to an existing file
using (System.IO.StreamWriter file = new System.IO.StreamWriter(@"C:UsersPublicTestFolderWriteLines2.txt", true))
{
  file.WriteLine("Fourth line");
}
  

Итак, вы могли бы сделать это со своим кодом, и это должно сработать:

 StreamWriter sw = new StreamWriter(Server.MapPath("~/rateBooks.log"), true);
sw.WriteLine("userName "   txtUserName.Text   " "   "bookTitle "   txtBookTitle.Text   " "   "ISBN "   txtISBN.Text);
sw.Close();
  

РЕДАКТИРОВАТЬ: просто используйте ответ мастера теней, он намного чище…

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

1. Нет необходимости создавать какие-либо потоки, File для этого в классе есть статические помощники. 🙂

2. @Shadow Wizard — да, я согласен. Я бы сделал это не так, но я полагаю, что было бы неплохо передать информацию и показать, как он мог бы внести незначительную правку в свой существующий код. Лучше показать наилучшую практику, хотя наверняка…

3. Да, я также склонен много раз предлагать небольшие исправления существующего кода, так что все хорошо. 🙂