无法弄清楚为什么我在C中打开文件时出错

时间:2017-10-29 01:01:01

标签: c file

我必须编写一个程序,wchich以二进制模式打开文件并计算它的大小。我只需编写一个函数来执行此操作,它只需要有一个参数,即数据文件的名称。

我插入文件的名称并不断收到错误消息,我无法弄清楚原因。

这是函数

long getFileSize (char * fileName) {

    long size_Of_File = 0;
    FILE *data_file;
    data_file = fopen(fileName, "rb");

    if (data_file == NULL) {
            printf("Error opening the file!\n");
            return -1;
    };

    fseek(data_file, 0, SEEK_END);
    size_Of_File = ftell(data_file);

    fclose(data_file);
    return size_Of_File;
}

和函数main(),如果你需要它:

int main () {
    char * fileName;
    fileName = (char *) malloc (50 * sizeof(char));  //maximum length of the filename is 50 symbols
    long file_size;


    if (fileName != NULL) {
        printf ("Please write the name of the data file (with \'.txt\' prefix): ");
        fgets(fileName, 50, stdin);
        file_size = getFileSize(fileName);
        printf ("The size of the file is %li bytes.\n", file_size);
    } else {
        printf ("Could not allocate memory!\n");
    };

   free(fileName);
   return 0;
}

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

正如Tom Karzes所提到的,您需要从字符数组中删除换行符。

您可以这样做的一种简单方法是一次一个字节地逐步执行字符数组,检查当前字节是否为换行符,并将其替换为字符串终结符字节'\ 0'。

//...

fgets(fileName, 50, stdin);

//Replace the first occurrence of \n with \0 to end the string.
for ( int i=0; i<50; i++ ) {
  if ( fileName[i] == '\n' ) {
    fileName[i] = '\0';
    break;
  }
}

//...