在前面介绍fseek和ftell两个函数的时候就做过这样的一个例子,本文不但有fseek和ftell的实现,还有一个使用了fgets实现的方法。这个例子是一个题目,题目提供了函数原型:
int getSize(const char* filename, unsigned int* size);
完成要求:
1、getSize函数获取参数filename文件的尺寸(文件大小)
2、返回值设定
a、文件若不存在函数返回值返回-1
b、文件若存在,其他错误返回-2
c、函数运行正常返回0
3、若函数正确获得文件的大小,通过size指针将数值写回
4、提交的源码应当可以运行,放可不扣分
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <string.h> int getSize(const char *szFileName, unsigned int* size); int getSize2(const char *szFileName, unsigned int* size); int main(int argc, char* argv[]) { unsigned int size = 0; // 方法1,使用fgets方式 getSize("0505_01.vcxproj", &size); // 方法2,使用ftell方式 getSize2("0505_01.vcxproj", &size); printf("%d\n", size); system("pause"); return 0; } int getSize2(const char *szFileName, unsigned int* size) { FILE *pFile = fopen(szFileName, "r"); // 文件打开失败,或文件不存在 if (NULL == pFile) return -1; // 将指针移动到文件末尾 fseek(pFile, 0, SEEK_END); // 获取指针位置 *size = ftell(pFile); // 关闭文件 fclose(pFile); return 0; } int getSize(const char *szFileName, unsigned int* size) { FILE *pFile = fopen(szFileName, "r"); // 文件打开失败,或文件不存在 if (NULL == pFile) return -1; char buf[1024]; int nLen = 0; while (fgets(buf, 1024, pFile) != NULL) { // 计算读取出来的字符长度 nLen = strlen(buf); // 如果读取出来的内容最后一个字符是\n那么加1 // 否则就是读到了最后一行且没有\n,所以不加1 if (buf[strlen(buf) - 1] == '\n') *size += (nLen + 1); else *size += nLen; } fclose(pFile); return 0; }