C/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文件无法打开,所以方法二、三无法获取文件大小,因此推荐使用方法一、四。

如果还有其它方法,请大家补充。

感谢贼寇在何方补充了第四种方法!

你可能感兴趣的:(c/c++)