创建BMP文件时fopen / ofstream :: open失败

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (76)

几年前,我使用FILE创建了一个C ++函数来创建位图文件。最近(不确定何时或为何)打开文件时此代码现在失败了。问题在于open call......

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

目前,这会导致错误13,权限被拒绝错误。将文件扩展名更改为其他内容,fopen正常工作。例如,

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

文件正确保存,当将扩展名更改回BMP时,我可以在Paintshop中正确显示文件。

快速检查使用ofstream和相同的问题。

尝试打开BMP文件写入数据时,为什么我获得权限的任何想法都被拒绝错误?有关信息,我在Windows 10上使用Visual Studio Community 2017。

给出完整的代码部分......

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);
提问于
用户回答回答于

我设法找到了这个问题... Avast杀毒软件。我注意到,尝试对BMP文件执行打开操作需要几秒钟,而打开任何其他文件类型(成功或不成功)是瞬间完成的。当运行新程序时发生了类似的事情,我尝试禁用所有Avast防护,我可以使用现有代码成功创建BMP文件。

扫码关注云+社区

领取腾讯云代金券