几年前,我创建了一个C++函数,使用FILE创建位图文件。最近(不确定何时或为什么),此代码现在在打开文件时失败。问题出在开放调用上。
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);
发布于 2018-12-17 04:53:19
我设法找到了问题所在...Avast杀毒软件。我注意到,尝试对BMP文件执行打开操作需要几秒钟时间,而打开任何其他类型的文件(无论成功与否)都是瞬间完成的。当运行新程序时发生类似的事情时,我尝试禁用所有的Avast屏蔽,我可以使用现有的代码成功地创建一个BMP文件。
为了我个人的使用,我可以将我自己的程序列入白名单,但如果我把程序分发给其他人,那就很烦人了。
谢谢你的帮助。很抱歉提出了一个与C++无关的C++问题!
https://stackoverflow.com/questions/53804461
复制相似问题