如何解决CS50恢复问题:无法打开文件
我正在研究pset4 cs50的恢复分配,我想我已经完成了代码。但是,当我运行它时,它说:无法打开文件。如果我尝试双击文件'card.raw',则会弹出一个窗口,提示:“无法打开card.raw:文件格式不受支持”。请帮助我找出我的问题。这是我的代码:
#include <stdio.h>
#include <stdlib.h>
int main(int argc,char *argv[])
{
FILE * pFile = NULL;
unsigned char *buffer = malloc(512);
char* filename = NULL;
int filenumber = 0;
//If user didn't print 2 items
if(argc != 2)
{
printf("Usage: ./recover image\n");
return 1;
}
//THE PROBLEM IS HERE!!!
//if it can't open the file: error message
if (!pFile)
{
fprintf(stderr,"File cannot be opened\n");
return 2;
}
//Open the file
pFile = fopen(argv[1],"r");
int j=0;
// checking the card by 512b chunks
//loop
while (pFile)
{
int i =0;
i++;
//k=fread (buffer,512,i,*file);
int k = fread(buffer,pFile);
//if buffer [0]== 0xff // checking if it's the header. If yes - creating a new jpeg;
if (buffer[0] == 0xff && buffer[1] == 0xd8 && buffer[2] == 0xff && (buffer[3] & 0xf0) == 0xe0)
{
// if it's not the first file,we should close the last one
if (filename != NULL)
{
fclose(pFile);
}
//sprintf
sprintf(filename,"%03i.jpg",2);
//FILE = fopen (W)
pFile = fopen(filename,"w");
// fwrite (buffer,j,*file1)
fwrite (buffer,pFile);
//j=j+1
j = j + 1;
}
// if k<512 - end of the loop
if (k < 512)
{
return 0;
}
}
free(buffer);
}
请帮助我理解。谢谢。
解决方法
您正在检查打开文件之前尝试打开文件是否失败:
if (!pFile)
{
fprintf(stderr,"File cannot be opened\n");
return 2;
}
//Open the file
pFile = fopen(argv[1],"r");
只需在测试之前将fopen
调用移到上面,看看它是否成功:
//Open the file
pFile = fopen(argv[1],"r");
if (!pFile)
{
fprintf(stderr,"File cannot be opened\n");
return 2;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。