C 如何得到文件的大小
先用fopen打开文件,然后把文件指针指向文件尾.
再用ftell获得文件指针当前位置(即文件长度).
源代码:
#include "stdafx.h" #include <stdio.h> #include <iostream> using namespace std; int main() { FILE* fp = NULL; int nFileLen = 0; fp = fopen("c:/Test.txt", "rb"); if (fp == NULL) { cout << "can't open file" << endl; return 0; } fseek(fp,0,SEEK_END); //定位到文件末 nFileLen = ftell(fp); //文件长度 cout << "file len = " << nFileLen << endl; return 0; }
C++获得文件大小的方法
#include <iostream> #include <io.h> #include <sys/stat.h> #include <afx.h> #define _AFXDLL using namespace std; void main() { // 此文件在工程打开状态下为不可访问 char* filepath = "..//test.ncb"; // 方法一 struct _stat info; _stat(filepath, &info); int size = info.st_size; cout<<size<<endl; // 方法二 FILE* file = fopen(filepath, "rb"); if (file) { int size = filelength(fileno(file)); cout<<size<<endl; fclose(file); } // 方法三 CFile cfile; if (cfile.Open(filepath, CFile::modeRead)) { int size = cfile.GetLength(); cout<<size<<endl; } // 方法四 HANDLE handle = CreateFile(filepath, FILE_READ_EA, FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0); if (handle != INVALID_HANDLE_VALUE) { int size = GetFileSize(handle, NULL); cout<<size<<endl; CloseHandle(handle); } }
VS2005:若编译链接不通过,需要修改工程设置:
(1) Configuration Properties -> C/C++ -> Code Generation -> Runtime Library, 选择"Multi-threaded Debug(/MTd)"
(2) Configuration Properties -> Linker -> Input -> Ignore Specific Library, 输入"msvcprtd.lib"
例子中,由于在工程打开状态下,test.ncb文件无法打开,所以方法二、三无法获取文件大小,因此推荐使用方法一、四。

浙公网安备 33010602011771号