Как я могу прочитать и отобразить информацию из нескольких текстовых файлов в 1 окне сообщения C #?

#c#

#c#

Вопрос:

Итак, у меня есть приложение, которое использует флажки и переключатели для проверки компьютера на наличие вирусов, после чего каждый антивирус создает журнал своих действий. Что я хотел бы сделать, так это (в зависимости от того, какие флажки (всего их 5) установлены), чтобы после завершения работы появлялось окно сообщения, и я прочитал каждый текстовый файл для ключевого слова, а затем прочитал эту строку для всех 5 текстовых файлов (если все 5 были созданы, это могло быть 1,2,3,4 или 5 из них). Итак, когда все будет сделано, появится только 1 окно сообщения с информацией из всех 5 текстовых файлов по 1 строке в каждом, например «Panda обнаружила 5 вирусов», следующая строка «В квадрате найдено 0 вирусов» и т.д. Затем, когда окно сообщения будет закрыто, удалите текстовые файлы. Я знаю, как это сделать с помощью 1 флажка и 1 текстового файла, но я не знаю, как это сделать с помощью нескольких флажков и нескольких текстовых файлов. Мое средство чтения одного файла работает следующим образом:

 int counter = 0;
string line;

// Read the file and display it line by line.
System.IO.StreamReader file = new System.IO.StreamReader("C:\Panda.txt");
while ((line = file.ReadLine()) != null)
{
    if (line.Contains("Number of files infected"))
    {
        MessageBox.Show("Panda "   line);
    }
}
file.Dispose();
System.IO.File.Delete("C:\Panda.txt");
  

любая помощь была бы приятна, спасибо. О, и, пожалуйста, ТОЛЬКО C # .net 2.0

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

1. с помощью строки MessageBox. Показать (запись); я получаю сообщение об ошибках «наилучший перегруженный метод соответствует ‘System. Windows. Forms.MessageBox.show(string)’ имеет некоторые недопустимые аргументы. и «Аргумент 1: не удается преобразовать из ‘System.IO.StringWriter’ в ‘string’

2. сработало почти идеально, за исключением того, что мне нужна какая-то обработка ошибок, где, как будто не всегда будут отмечены опции 1, 2, 3, 4 и 5, иногда i может быть 1,2 и 5, или это может быть только 3. Где прямо сейчас он ищет 2 текстовых файла, и если первый 1 не может быть найден, это просто ошибки.

Ответ №1:

Вы можете использовать StringWriter для добавления текущей строки и, наконец, отображения в окне сообщения

         string FirstPanda = "C:\FirstPanda.txt";
        string SecondPanda = "C:\SecondPanda.txt";


        StringWriter writer = new StringWriter(); // System.IO;
        System.IO.StreamReader file;

        if (firstCheckBox.IsChecked)  
        {
            if (File.Exists(FirstPanda))
            {
                file = new System.IO.StreamReader(FirstPanda);
                while ((line = file.ReadLine()) != null)
                {
                    if (line.Contains("Number of files infected"))
                    {

                        writer.WriteLine("Panda "   line);
                    }
                }
                file.Close();
                System.IO.File.Delete(FirstPanda);
            }
        }

        if (secondCheckBox.IsChecked)
        {
            if (File.Exists(SecondPanda))
            {
                file = new StreamReader(SecondPanda);

                while ((line = file.ReadLine()) != null)
                {
                    if (line.Contains("Number of files infected"))
                    {

                        writer.WriteLine("Panda "   line);
                    }
                }
                file.Close();

                System.IO.File.Delete(SecondPanda);
            }
        }
        MessageBox.Show(writer.ToString());
  

Надеюсь, это поможет вам

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

1. сработало почти идеально, за исключением того, что мне нужна какая-то обработка ошибок, где, как будто не всегда будут отмечены опции 1, 2, 3, 4 и 5, иногда i может быть 1,2 и 5, или это может быть только 3. Где прямо сейчас он ищет 2 текстовых файла, и если первый 1 не может быть найден, это просто ошибки.

2. Как вы можете сделать так, чтобы он проверял, существуют ли они, прежде чем он их прочитает? потому что, если сказать Panda.txt разве нет, но NextPand.txt это … это просто выдает ошибку

3. Используйте File. Существует (путь), чтобы проверить, существуют ли они.

4. хорошо, да, файл. Exists (путь), казалось, сделал свое дело, спасибо, но теперь, как мне изменить ‘if (строка. Содержит строку («»))’ для чтения более одной строки только для одного из файлов? Поскольку в одном из текстовых файлов должно быть прочитано 4 строки, ему нужно найти слово «Найдено», а затем прочитать следующие 5 строк (5, потому что первая после найденной — пробел)

Ответ №2:

Я надеюсь, что правильно понял вопрос, но если я перефразирую его. Вы хотите обработать 5 файлов и, когда все будет сделано, показать сводку того, что было найдено?

Если да, то почему бы просто не сделать это

 public void ProcessFiles()
{
  var resultText = new StringBuilder();

  if (PandaCheckBox.Checked)
  {
    var result = DoPandaProcessing(); // Read file and do whatever here
    resultText.Append(result.ResultMessage);
  }

  if (Process2CheckBox.Checked)
  {
    var result = DoProcess2Processing();
    if (resultText.Length > 0)
    {
      resultText.Append(Environment.NewLine);
    }
    resultText.Append(result.ResultMessage);
  }

  MessageBox.Show(resultText.ToString());
}
  

И только потому, что мне не нравится, как вы распоряжаетесь (т. Е. вы не используете ни при каких исключениях), реализуйте методы, подобные этому

 public ProcessResult DoPandaProcessing()
{
  using (var file = File.OpenText("filename.txt"))
  {
    while ((line = file.ReadLine()) != null)
    {
       if (line.Contains("Number of files infected"))
       {
          return new ProcessResult { Status = Status.Success, ResultMessage = "Panda "   line };
       }
    }

    return new ProcessResult { Status = Status.Failure, ResultMessage = "Panda: No result found!" }
  }
}