I'm working on the recover assignment of pset4 cs50, and I think I finished my code. But when I run it, it says: file cannot be opened. If I try double-clicking on the file 'card.raw', a pop-up comes up that says: "Can't open card.raw: file format unsupported". Please help me figure out my problem. Here's my code:
#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, 512, i, 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, 512, j, *file1)
fwrite (buffer, 512, j, pFile);
//j=j+1
j = j + 1;
}
// if k<512 - end of the loop
if (k < 512)
{
return 0;
}
}
free(buffer);
}
Please help me understand. Thanks.
You're checking if the open failed before trying to open the file:
if (!pFile)
{
fprintf(stderr, "File cannot be opened\n");
return 2;
}
//Open the file
pFile = fopen(argv[1], "r");
Just move the fopen
call up before the test to see if it succeeded:
//Open the file
pFile = fopen(argv[1], "r");
if (!pFile)
{
fprintf(stderr, "File cannot be opened\n");
return 2;
}