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