获取文件大小的方式
2014-04-04 09:56
253 查看
最初是这样
ULONGLONG llFileSize = 0;
CFile file;
BOOL bOpen = file.Open(strFullPath, CFile::modeRead);
if (bOpen)
{
llFileSize = file.GetLength();
file.Close();
}
因为业务需求,文件大小不是必要的,所以采用这种方式而不是报错。
后来发现经常有大小是0的情况,调式发现bOpen为FALSE,瞬间想到了系统中的某些模块正在独占这些文件,造成读方式打开文件失败。仔细想想,文件大小是文件的基本属性,无论文件是否被占用,文件大小操作系统使用会知道。所以查了下资料,改为以下:
ULONGLONG NMGetFileSize(CString strFileFullPath)
{
WIN32_FIND_DATA fileInfo;
HANDLE hFind = FindFirstFile(strFileFullPath,&fileInfo);
if(hFind == INVALID_HANDLE_VALUE)
return FALSE;
LARGE_INTEGER li;
li.LowPart = fileInfo.nFileSizeLow;
li.HighPart = fileInfo.nFileSizeHigh;
FindClose(hFind);
return li.QuadPart;
}这里要注意WIN32_FIND_DATA结构分为SizeLow&SizeHigh,将两块内存组合起来才是真正的文件大小。
ULONGLONG llFileSize = 0;
CFile file;
BOOL bOpen = file.Open(strFullPath, CFile::modeRead);
if (bOpen)
{
llFileSize = file.GetLength();
file.Close();
}
因为业务需求,文件大小不是必要的,所以采用这种方式而不是报错。
后来发现经常有大小是0的情况,调式发现bOpen为FALSE,瞬间想到了系统中的某些模块正在独占这些文件,造成读方式打开文件失败。仔细想想,文件大小是文件的基本属性,无论文件是否被占用,文件大小操作系统使用会知道。所以查了下资料,改为以下:
ULONGLONG NMGetFileSize(CString strFileFullPath)
{
WIN32_FIND_DATA fileInfo;
HANDLE hFind = FindFirstFile(strFileFullPath,&fileInfo);
if(hFind == INVALID_HANDLE_VALUE)
return FALSE;
LARGE_INTEGER li;
li.LowPart = fileInfo.nFileSizeLow;
li.HighPart = fileInfo.nFileSizeHigh;
FindClose(hFind);
return li.QuadPart;
}这里要注意WIN32_FIND_DATA结构分为SizeLow&SizeHigh,将两块内存组合起来才是真正的文件大小。
相关文章推荐
- Java获取文件大小方式
- C#,获取文件大小,递归方式
- C++文件读写之获取文件大小的几种常见的方式
- 使用Win API 获取文件大小(可获取正在使用的文件,包括独占方式打开的文件GetFileSize)
- Android获取文件夹及文件大小整合成的帮助类
- VC 获取文件大小方法集锦
- jave 获取音视频文件的大小、以及播放时长
- JavaScript:客户端获取上传文件的大小
- Java中获取文件大小的正确方法
- 关于java获取文件路径的几种方式
- oracle获取表空间文件大小
- python 读取配置文件方式 获取股票
- NSFileManager和NSFileHandle(附:获取文件大小 )
- Asp.Net 文件操作基类(读取,删除,批量拷贝,删除,写入,获取文件夹大小,文件属性,遍历目录)(二)
- 获取目录大小和文件个数的工具类
- 在移动端获取服务端文件的大小 this.fileSize = conn.getContentLength();
- UNIX获取文件大小
- java 获取当前文件(项目)路径的多种方式
- C++获取文件大小方法
- Android HttpURLConnection 获取下载文件大小