【问题标题】:Cs50 recover problem: file can't be openedcs50恢复问题:文件无法打开
【发布时间】:2020-08-18 10:21:10
【问题描述】:

我正在处理 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, 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);
}

请帮助我理解。谢谢。

【问题讨论】:

  • 正确的缩进很重要。不要让我们难以阅读,更重要的是,为了您自己!

标签: c file cs50 recover


【解决方案1】:

您正在检查打开是否失败之前尝试打开文件:

    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;
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-08
    • 1970-01-01
    • 1970-01-01
    • 2022-01-10
    • 1970-01-01
    • 1970-01-01
    • 2010-11-27
    • 1970-01-01
    相关资源
    最近更新 更多