Проблема с восстановлением Cs50: файл не может быть открыт

#c #file #cs50 #recover

#c #файл #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 imagen");
        return 1;
    }
    //THE PROBLEM IS HERE!!!
    //if it can't open the file: error message
      if (!pFile)
    {
        fprintf(stderr, "File cannot be openedn");
        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 amp;amp; buffer[1] == 0xd8 amp;amp; buffer[2] == 0xff amp;amp; (buffer[3] amp; 0xf0) == 0xe0)
{
// if it's not the first file, we should close the last one
if (filename != NULL)
{
    fclose(pFile);
}
//sprintf
sprintf(filename, "i.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);
}
  

Пожалуйста, помогите мне разобраться. Спасибо.

Комментарии:

1. Важен правильный отступ. Не усложняйте чтение для нас и, что еще более важно, для себя!

Ответ №1:

Вы проверяете, не произошел ли сбой при открытии, прежде чем пытаться открыть файл:

     if (!pFile)
    {
        fprintf(stderr, "File cannot be openedn");
        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 openedn");
        return 2;
    }