Ошибка fopen / ofstream :: open при создании файла BMP - PullRequest
0 голосов
/ 16 декабря 2018

Несколько лет назад я создал функцию C ++, используя FILE для создания растровых файлов.В последнее время (не уверен, когда и почему) этот код не работает при открытии файла.Проблема с открытым вызовом ...

file_ptr = fopen("ScreenShots/Screenshot1.bmp", "wb");

В настоящее время это приводит к ошибке 13, ошибка разрешения запрещена.Измените расширение имени файла на что-то другое, и fopen работает нормально.Например,

file_ptr = fopen("ScreenShots/Screenshot1.bm2", "wb");

Файл сохраняется правильно, и при изменении расширения обратно на BMP я могу правильно отобразить файл в Paintshop.

Выполнена быстрая проверка с использованием ofstream и та же проблема.

Есть идеи, почему я получаю сообщение об ошибке «Отказано в доступе» при попытке открыть файлы BMP для записи данных?Для информации я использую Visual Studio Community 2017 в Windows 10.

Чтобы получить полный раздел кода ...

BITMAPFILEHEADER bitmap_header;
BITMAPINFOHEADER bitmap_info;
FILE *file_ptr;
unsigned int count;
unsigned char tempRGB;
char filename[256];
bool finished;


// CREATE A UNIQUE FILENAME

count = 1;
finished = false;

do
{
    // CREATE NAME

    sprintf(filename, "ScreenShots/Screenshot%d.bmp", count);


    // CHECK IF FILE EXISTS

    errno = 0;
    file_ptr = fopen(filename, "rb");
    if (file_ptr)
    {
        // FILE EXISTS

        fclose(file_ptr);
        count = count + 1;
    }
    else
    {
        // UNIQUE FILENAME

        file_ptr = fopen(filename, "wb");
        if (file_ptr == NULL)
        {
            // UNABLE TO OPEN FOR WRITING - GIVE UP
            // (USING OWN LOGGING CLASS)

            jalog.log("\nERROR on Screenshot >");
            jalog.log(filename);
            jalog.log("< >");
            jalog.log((short)errno);

            return;
        }

        finished = true;
    }
}
while (finished == false);

1 Ответ

0 голосов
/ 16 декабря 2018

Мне удалось найти проблему ... Антивирус Avast.Я заметил, что попытка выполнить действие открытия для файла BMP заняла несколько секунд, в то время как открытие любого другого типа файла (успешно или неудачно) было мгновенным.Как то же самое происходит при запуске новых программ, я попытался отключить все экраны Avast, и я мог успешно создать файл BMP, используя существующий код.

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

Спасибо за помощь ... и извините за то, что подняли проблему с C ++, которая в итоге не имела ничего общего с C ++!

...