#c#
#c#
Вопрос:
У меня есть приложение на c #, в котором оно отображает сообщение в messagebox после выполнения запроса.В то же время я хочу, чтобы он записал файл журнала. Это то, что я пробовал, но безуспешно. Мой файл журнала был пуст. Он создал пустой файл.
private void backgroundWorker_Import_DoWork(object sender, DoWorkEventArgs e)
{
//Finally, loop through each row in the dataView and execute INSERT Statements against database
int recCount = 0;
successCount = 0;
failedCount = 0;
dv.RowFilter = "execute_bit IN ('1')";
using (MySqlConnection connectionMySql = new MySqlConnection(connectionStringMySql))
{
connectionMySql.Open();
MySqlCommand commandMySql = new MySqlCommand();
commandMySql.Connection = connectionMySql;
foreach (DataRowView rowView in dv)
{
recCount ;
backgroundWorker_Import.ReportProgress(recCount);
commandMySql.CommandText = rowView["sql"].ToString();
try
{
successCount = successCount commandMySql.ExecuteNonQuery();
//WriteToLogFile("");
//WriteToLogFile("");
**WriteToLogFile(DateTime.Now.ToString() ", " recCount.ToString() "," successCount.ToString() "," failedCount.ToString());
}**
catch (Exception)
{
failedCount ;
}
}
}
}
private void backgroundWorker_Import_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
string msg = "";
msg = msg "Records successfully imported: " successCount.ToString() Environment.NewLine;
msg = msg "Records that failed to import: " failedCount.ToString() Environment.NewLine Environment.NewLine;
msg = msg "Records excluded from import (20 minute grace-period): " (tblVehicles.Rows.Count - successCount - failedCount).ToString();
progressBar1.Visible = false;
MessageBox.Show( msg, "Operation complete", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
**private void WriteToLogFile(string[] output)
{
StreamWriter sw = null;
FileStream fs = null;
string logfileFileName = System.IO.Path.Combine( "C:/luvi/logfile.txt");
fs = File.Open(logfileFileName, FileMode.Append, FileAccess.Write);
sw = new StreamWriter(fs, System.Text.Encoding.UTF8);
foreach (string line in output)
{
sw.WriteLine(line);
}
sw.Close();
sw = null;
}**
Комментарии:
1. Успешно ли запущена программа? Вы сталкиваетесь с какими-либо ошибками?
2. БЕЗ ошибок он запускается и отображает окно сообщения с количеством успешных и неудачных записей. Мне нужна та же информация, которая отображается в файле журнала.
3. Рассмотрите инструкцию using при работе с FileStream и StreamWriter.
Ответ №1:
Вы могли бы использовать File.WriteAllLines
, как показано в этом разделе.
Его синтаксис выглядит следующим образом:
public static void WriteAllLines(
string path,
string[] contents
)
В вашем случае вы бы использовали его следующим образом:
string logfileFileName = @"C:/luvi/logfile.txt";
File.WriteAllLines(logfileFileName, output);
Примечание: при этом файл перезаписывается, если вы хотите добавить его, используйте File .Строки приложения.
Вам также необходимо вызвать свой метод, что может быть проблемой, потому что я не вижу этого в вашем коде. В следующих изменениях я заменил string msg
для array
и добавил их (вы также можете использовать список и вызвать list.Add).
private void backgroundWorker_Import_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
string[] msg = new string[] {};
msg[0] = "Records successfully imported: " successCount.ToString();
msg[1] = "Records that failed to import: " failedCount.ToString();
msg[2] = "Records excluded from import (20 minute grace-period): " (tblVehicles.Rows.Count - successCount - failedCount).ToString();
// Write to log!
WriteToLogFile(msg);
// Show to messagebox.
string showmsg = msg[0] Environment.NewLine msg[1] Environment.NewLine msg[2];
progressBar1.Visible = false;
MessageBox.Show(showmsg, "Operation complete", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
private void WriteToLogFile(string[] output)
{
string logfileFileName = "C:/luvi/logfile.txt";
File.AppendAllLines(logfileFileName, output);
}
Комментарии:
1. Спасибо Matthijs, но я получил эту ошибку
No best type found for implicitly-typed array
в строке [] msg = new[] {};2. Целью вызова было вызвано исключение. — Приложение. Выполнить (новая форма 1());
3. Это в вашей загрузке или конструкторе. Посчитайте этот вопрос решенным и откройте другой, поскольку теперь у вас возникают проблемы, которые не имеют ничего общего с вашим первоначальным вопросом.
4. строка[] msg = новая строка[3].. это сделало работу, спасибо Matthijs.#
5. Рад, что смог помочь! Создание списка вместо использования массива также было бы вариантом, это создает возможность для дополнительной отчетности.
Ответ №2:
кажется, проблема с методом WriteToLogFile(string[] output). Вы передаете одну строку, в то время как она ожидает множество строк. блок catch молча завершает работу.