【发布时间】:2019-06-14 08:53:13
【问题描述】:
我正在尝试写入现有的 bmp 文件。 该操作应该删除上面的数据,这对我来说很好。 首先我想读取原始标题,然后切换宽度和高度数据,然后使用新标题“创建”新文件。 出于某种原因,我设法在“rb”模式下打开和读取文件,但是当我尝试在“wb”模式或任何其他写入模式下这样做时,文件指针被初始化为 NULL。
使用 struct BmpHeader 读取效果很好。
更新: 使用后:
err = fopens(...);
我得到了 err = 13。 我该如何解决这个问题?
#define HEADERSIZE 54
int **Matrix = GivenMatrix;
FILE *f;
int row, col,i;
BmpHeader header;
long Newwidth, Newheight;
int pixelBytesInRow, padding;
fopen_s(&f, "plate.bmp", "rb");
fread(&header, HEADERSIZE, 1, f);
fclose(f);
Newheight = header.width;
Newwidth = header.height;
header.width = Newwidth;
header.height = Newheight;
fopen_s(&f, "plate.bmp", "wb");
fwrite(&header, HEADERSIZE, 1, f);
【问题讨论】:
-
更新:当代码到达 fwrite() 行时 - 程序崩溃,因为文件指针 f 设置为 NULL。
-
您对文件有写权限吗?
-
查看
fopen_s的返回码,例如errno_t rc; rc = fopen_s(...); if(rc) {printf("fopen_s(plate.bmp): %s\n", strerror(rc)); } -
我怎么知道?
-
“程序崩溃,因为文件指针 f 设置为 NULL” - 这就是我们检查返回码的原因,并且 从不 假定文件 i /o 正常工作。