【发布时间】:2019-05-17 04:25:59
【问题描述】:
几年前,我使用 FILE 创建了一个 C++ 函数来创建位图文件。最近(不确定何时或为什么)此代码现在在打开文件时失败。问题在于公开通话...
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);
【问题讨论】:
-
您真的确定关于开放模式标志吗?你知道
"r"是为了阅读? -
以读取模式打开通常不会创建任何文件。
-
@JonAlma 好吧,你可以edit你的问题,如果你在上面,我建议你根据需要在这里发布minimal reproducible example..
-
可能是文件已经存在,权限不允许写入,所以fopen失败。
-
您正在查看相对路径
"ScreenShots/Screenshot%d.bmp",请确保该路径中有"ScreenShots"目录。或使用完整路径名。
标签: c++ visual-studio fopen bmp