#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. Да, я также склонен много раз предлагать небольшие исправления существующего кода, так что все хорошо. 🙂