Skip to content

Instantly share code, notes, and snippets.

@zinoviy23
Last active April 14, 2019 15:27
Show Gist options
  • Save zinoviy23/e109a68565611b39afa4edd5a45c8b23 to your computer and use it in GitHub Desktop.
Save zinoviy23/e109a68565611b39afa4edd5a45c8b23 to your computer and use it in GitHub Desktop.
Считывание из файла

Шаблон для считывания

try
{
  using (var fileStream = new FileStream("...", FileMode.Create))
  {
    // считывание  
  }
}
catch (IOException ex)
{
  Console.WriteLine("Ошибка пути: {0}", ex.Message);  
}
catch (UnauthorizedAccessException ex)
{
  Console.WriteLine("Файл не имеет нужного флага");   
}
catch (SecurityException ex) 
{
  Console.WriteLine("Не хватает прав доступа"); 
}
catch (Exception ex)
{
  Console.WriteLine(ex.Message);
}

try нужен для обработки ошибок. using для того, чтобы файл всегда закрылся, даже если случилось что-то плохое. Лучше всегда использовать using. Все исключения взяты с официальной документации, её можно получить и в среде. Это не все исключения, но самые частые и связанные именно с работой с файлами.

Флаги для открытия файлов

  • OpenOrCreate -- создаёт файл, если его нет, иначе открывает
  • Create -- всегда создаёт файл

у многих была ошибка в том, что уже был какой-то файл ser.xml

<Kek>
  <Name>Sasha</Name>
</Kek>

и его открывали как OpenOrCreate и передавали сериализатору. Но сериализатор записывает в поток только то, что ему дали, то есть пусть в потоке уже M байт, ему дали записать N < M байт, он запишет в первые N символов то, что дали, а оставшиеся M - N байт оставит как было. В итоге, вы думали будет записано:

<Kek>
  <Name>Alex</Name>  
</Kek>

а на деле

<Kek>
  <Name>Alex></Name>
<Kek>>

на что будет вылетать исключение. То есть в этом случае надо всегда выбирать Create

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment