unsigned long GetFileLength1 (FILE * fileName) { unsigned long pos = ftell(fileName); unsigned long len = 0; fseek ( fileName, 0L, SEEK_END ); len = ftell ( fileName ); fseek ( fileName, pos, SEEK_SET ); return len; }
<方法二>利用stat
unsigned long GetFileLength2 (char * fileName) { struct stat buf; int i = stat ( fileName, &buf ); if (i !=0) MessageBox(NULL,"ERROR for STAT","ERROR",0); return buf.st_size; }
<方法三>利用filelength 必須include< fcntl.h>
原型: long filelength(int fd)
long GetFileLength3(char *fileName)
{
int fd = open(fileName,O_RDONLY | O_BINARY);
if(fd == -1 ) return -1;
long lsize = filelength(fd);
close(fd);
return lsize;
}
<方法四> 利用Windows API GetFileSize & GetFileSizeEx
Large File Size 請使用 GetFileSizeEx函式。
<方法五>利用Windows API FindFirstFile()
/// For Windows:
#include <windows.h> double dblFileSize(const char* fname) { if (!fname && !*fname) return 0.0; HANDLE h; WIN32_FIND_DATA info; if ((h=FindFirstFile(fname,&info)) != INVALID_HANDLE_VALUE) { FindClose(h); if ((info.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY) == 0) // Is it a file? { union { struct { DWORD low, high; } lh; __int64 size; // MS large int extension } file; file.lh.low = info.nFileSizeLow; file.lh.high= info.nFileSizeHigh; return file.size; // will be casted to double } // It's a directory, not a file } return 0.0; // No such name. }方法 1~3都無法處理大檔案,要注意~
資料來源參考:這裡
沒有留言:
張貼留言