Как правильно обработать исключения при выполнении файла io

super используется для вызова конструктора базового класса. Итак, в вашем примере конструктор из CardTitle вызывает конструктор из StatelessWidget.

Key - это тип, используемый в Flutter для идентификации виджетов, и позволяет Flutter знать, когда виджет, перемещаемый в дереве, совпадает с виджетом, который ранее находился в другом месте. Здесь есть хорошее видео о ключах: https://www.youtube.com/watch?v=kn0EOS-ZiIc

16
задан Morten Christiansen 17 September 2008 в 19:36
поделиться

7 ответов

..., но это возможный получить немного более мелкомодульные сообщения об ошибках.

Да. Разрешение и выгода IOException, и использование Exception.ToString() метод, чтобы заставить относительно соответствующее сообщение об ошибке отображаться. Обратите внимание, что исключения, сгенерированные Платформой.NET, предоставят эти полезные строки, но если Вы собираетесь выдать свое собственное исключение, необходимо не забыть включать ту строку в Exception конструктор, как:

throw new FileNotFoundException("File not found");

кроме того, абсолютно, согласно [1 115] Scott Dorman , используйте тот using оператор. Вещь заметить, тем не менее, состоит в том, что using оператор не делает на самом деле catch ничто, которое является способом, которым это должно быть. Ваш тест, чтобы видеть, существует ли файл, например, представит состояние состязания, которое может быть скорее досаждать . Это действительно не приносит Вам пользы, чтобы иметь его там. Так, теперь, для читателя мы имеем:

try {  
    using (StreamReader reader = file.OpenText()) {  
        // Your processing code here  
    }  
} catch (IOException e) {  
    UI.AlertUserSomehow(e.ToString());  
}

Короче говоря, для основных операций файла:
1. Используйте using
2, Перенесите оператор использования или функцию в try / catch тот catch es IOException
3. Используйте Exception.ToString() в Вашем catch для получения полезного сообщения об ошибке
4. Не пытайтесь обнаружить исключительные проблемы файла сами. Позвольте.NET сделать бросок для Вас.

13
ответ дан 30 November 2019 в 22:18
поделиться
  • Пропуск Файл. Существует (); или обработайте его в другом месте или позвольте CreateText ()/, OpenText () повышают его.
  • конечный пользователь обычно только заботится, успешно выполняется ли это или нет. Если это перестало работать, просто скажите так, он не хочет детали.

я не нашел встроенный способ получить детали о том, что и почему что-то отказавшее в.NET, но если Вы идете собственный компонент с CreateFile, у Вас есть тысячи кодов ошибок, которые могут сказать Вам, что пошло не так, как надо.

1
ответ дан 30 November 2019 в 22:18
поделиться

Возможно, это не то, что Вы ищете, но пересматриваете вид, Вы используете обработку исключений. При первой обработке исключений не должен рассматриваться, чтобы быть "удобным для пользователя", по крайней мере, пока Вы думаете о программисте как о пользователе.

сумма А для этого может быть следующей статьей http://goit-postal.blogspot.com/2007/03/brief-introduction-to-exception.html .

0
ответ дан 30 November 2019 в 22:18
поделиться

Я попытался бы проверить на файл. Существует прежде, чем назвать Ваше чтение-запись, и ответьте пользователю там, вместо того, чтобы создать издержки повышения ошибки и ловли его позже, так как проверку настолько легко осуществить. Я действительно понимаю, что потребность в повышении ошибок, но в этом особенно случается, простая проверка, по моему скромному мнению, была бы лучшим решением. То, что я имею в виду, добавляет еще один метод, чтобы проверить, существует ли файл.

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

-2
ответ дан 30 November 2019 в 22:18
поделиться

Я не вижу точку в проверке существование файла и бросок FileNotFoundException без сообщения. Платформа бросит сам FileNotFoundException с сообщением.

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

я сделал бы это что-то как следующее, поймал бы любое исключение вне метода и отобразил бы сообщение исключения:

public IList<string> ReadFile(string path)
{
    List<string> text = new List<string>();
    using(StreamReader reader = new StreamReader(path))
    {
      while (!reader.EndOfStream)      
      {         
         text.Add(reader.ReadLine());      
      }
    }
    return text;
}
1
ответ дан 30 November 2019 в 22:18
поделиться

Первой вещью, которую необходимо изменить, являются вызовы к StreamWriter и StreamReader для обертывания их в оператор использования, как это:

using (StreamReader reader = file.OpenText())
{
   List<string> text = new List<string>();
   while (!reader.EndOfStream)
   {
      text.Add(reader.ReadLine());
   }
}

Это будет заботиться о вызове Близко и Располагать для Вас и на самом деле перенесет его в блок попытки/наконец, таким образом, фактический скомпилированный код будет похож на это:

StreamReader reader = file.OpenText();
try
{
   List<string> text = new List<string>();
   while (!reader.EndOfStream)
   {
      text.Add(reader.ReadLine());
   }
}
finally
{
   if (reader != null)
      ((IDisposable)reader).Dispose();
}

преимущество здесь - то, что Вы удостоверяетесь, что поток закрывается, даже если исключение происходит.

До больше явная обработка исключений, это действительно зависит от того, что Вы хотите произойти. В Вашем примере Вы явно тестируете, если файл существует, и бросьте FileNotFoundException, который может быть достаточно для Ваших пользователей, но он не может.

7
ответ дан 30 November 2019 в 22:18
поделиться

Я использовал бы оператор использования для упрощения закрытия файла. См. MSDN оператор

использования C# Из MSDN:

  using (TextWriter w = File.CreateText("log.txt")) {
     w.WriteLine("This is line one");
     w.WriteLine("This is line two");
  }
  using (TextReader r = File.OpenText("log.txt")) {
     string s;
     while ((s = r.ReadLine()) != null) {
        Console.WriteLine(s);
     }
  }
0
ответ дан 30 November 2019 в 22:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: