Может быть сбой при открытии, после
_device = fopen ((char*)filename , "a");
проверьте, _device! = NULL
Редактировать Поскольку вы проверяете, что _device является действительным после открытияЯ бы хотел использовать отладчик для проверки значения _device при открытии и сравнения его со значением, передаваемым _fclose.Из интереса _device указывает на файл или устройство связи, такое как «COM2:», поскольку это также может иметь некоторое отношение к проблеме.Наконец, я бы разбил ваше окончательное утверждение следующим образом:
int CloseResult = fclose(_device);
if (CloseResult != 0)
cout << errno << CloseResult << endl;
Причина этого в том, что вы не знаете, является ли выход fclose или stream причиной вашего сбоя.Я предполагаю, что поток, который вы выводите, не связан с файлом, который вы пытаетесь закрыть;)