我必须编写一个程序,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;
}
感谢您的帮助。
答案 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;
}
}
//...