代码参考自lailx的博客:获取文件大小的4种方法(http://www.cnblogs.com/lailx/archive/2011/11/20/2256550.html)
 1 // TestGetFileSize.cpp : Defines the entry point for the console application.
 2 //
 3
 4 #include "stdafx.h"
 5 #include <iostream>
 6 #include <windows.h>
 7 #include <io.h>
 8 #include <sys\stat.h>
 9
10 using namespace std;
11
12 size_t GetFileSize1(LPCTSTR lpszFileName)
13 {
14    size_t nResult = 0;
15    HANDLE handle = CreateFile(lpszFileName, FILE_READ_EA, FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0);
16    if (handle != INVALID_HANDLE_VALUE)
17    {
18        nResult = GetFileSize(handle, NULL);
19        CloseHandle(handle);
20    }
21    return nResult;
22 }
23
24 size_t GetFileSize2(LPCTSTR lpszFileName)
25 {
26    size_t nResult = 0;
27    WIN32_FIND_DATA fileInfo;
28    HANDLE hFind;
29    hFind = FindFirstFile(lpszFileName, &fileInfo);
30    if(hFind != INVALID_HANDLE_VALUE)
31        nResult = fileInfo.nFileSizeLow;
32    FindClose(hFind);
33    return nResult;
34 }
35
36 size_t GetFileSize3(LPCTSTR lpszFileName)
37 {
38    size_t nResult = 0;
39    FILE* file = fopen(lpszFileName, "r");
40    if (file)
41    {
42        nResult = filelength(fileno(file));
43        fclose(file);
44    }
45    return nResult;
46 }
47
48 size_t GetFileSize4(LPCTSTR lpszFileName)
49 {
50    size_t nResult = 0;
51    struct _stat info;
52    _stat(lpszFileName, &info);
53    nResult = info.st_size;
54    return nResult;
55 }
56
57 DWORD Test(size_t (*pFunc)(LPCTSTR), LPCTSTR lpszFileName)
58 {
59    DWORD dwResult = 0;
60    size_t nFileSize = 0;
61    DWORD tick = GetTickCount();
62    for (int i=0; i<10000; i++)
63    {
64        nFileSize = pFunc(lpszFileName);
65 //     cout<<"FileSize = "<<nFileSize<<endl;
66    }
67    dwResult = GetTickCount() - tick;
68    cout<<"Cost: "<<dwResult<<endl;
69    return dwResult;
70 }
71
72
73 int main(int argc, char* argv[])
74 {
75    char *szFileName = "G:\\1.txt";
76    DWORD dwCost[4] = {0};
77
78    dwCost[0] = Test(GetFileSize1, szFileName);
79    system("pause");
80
81    dwCost[1] = Test(GetFileSize2, szFileName);
82    system("pause");
83
84    dwCost[2] = Test(GetFileSize3, szFileName);
85    system("pause");
86
87    dwCost[3] = Test(GetFileSize4, szFileName);
88    system("pause");
89
90    return 0;
91 }

测试结果:

当目标文件正在被写入的时候,体积逐渐增大,但测试发现第GetFileSize2()、GetFileSize4()返回的文件大小是固定不变的,因此在需要监视文件大小时,这两种方法不可取。

转载于:https://www.cnblogs.com/ddgg/archive/2013/02/25/2932335.html

编写测试:VC下获取文件大小的4种方法相关推荐

  1. java中测长度的方法,java获取文件大小的几种方法

    目前java获取文件大小的方法有两种: 1.通过file的length()方法获取: 2.通过流式方法获取: 通过流式方法又有两种,分别是旧的java.io.*中fileinputstream的ava ...

  2. java中比较两个文件的大小_Java实现获取文件大小的几种方法

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 目前Java获取文件大小的方法有两种: 1.通过file的length()方法获取: 2.通过流式方法获取: 通过流式方法又有两种,分别是旧的java.i ...

  3. java获取文件大小_Java实现获取文件大小的几种方法

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 目前Java获取文件大小的方法有两种: 1.通过file的length()方法获取: 2.通过流式方法获取: 通过流式方法又有两种,分别是旧的java.i ...

  4. Windows上获取文件大小的几种方法及获取文件夹大小方法

    文章来自:https://blog.csdn.net/mfcing/article/details/53184921 获取文件大小 Windows提供了好几个API函数来获取文件大小,还可以使用标准C ...

  5. Android下获取FPS的几种方法

    FPS(Frames Per Second)是关乎Android用户体验最为重要的指标之一,而在VR中更是如此.为了评估VR系统.VR SDK及Unity应用的性能,通常会实时获取FPS并将其显示出来 ...

  6. android fps 获取,Android下获取FPS的几种方法

    FPS(Frames Per Second)是关乎Android用户体验最为重要的指标之一,而在VR中更是如此.为了评估VR系统.VR SDK及Unity应用的性能,通常会实时获取FPS并将其显示出来 ...

  7. android 获取wifi的ip地址吗,Android开发实现在Wifi下获取本地IP地址的方法

    本文实例讲述了Android开发实现在Wifi下获取本地IP地址的方法.分享给大家供大家参考,具体如下: 代码核心介绍: WifiManager类提供了对设备Wifi功能的管理,包括Wifi开关的打开 ...

  8. android 图片资源目录下,Android编程实现获取图片资源的四种方法

    本文实例讲述了Android编程实现获取图片资源的四种方法.分享给大家供大家参考,具体如下: 1. 图片放在sdcard中: Bitmap imageBitmap = BitmapFactory.de ...

  9. [Windows][VC]开机自动启动程序的几种方法

    原文:[Windows][VC]开机自动启动程序的几种方法 很多监控软件要求软件能够在系统重新启动后不用用户去点击图标启动项目,而是直接能够启动运行,方法是写注册表Software\\Microsof ...

最新文章

  1. 【Android】Source Insight 基本用法 ( 导入 Android 源码 | 设置字体 | 显示行号 | 搜索功能 | 快捷键设置 )
  2. 能用条件注释改善的IE兼容问题
  3. 管理员请注意 一条后门病毒攻击链正在针对服务器发起入侵
  4. 理清ThreadLocal、ThreadLocalMap、Thread之间的关系
  5. ClangFormat代码格式化
  6. Master of GCD(差分数组||线段树)
  7. [LeetCode] Add Two Numbers
  8. Spring中采用公共变量并发问题解决
  9. qt android .so反编译,Qt5 程序初步逆向分析+解析脚本
  10. weixin-java-tools工具-出现JedisDataException问题
  11. Java实现微信小程序登录(服务端)
  12. 上位机与PLC基于Fins/UDP通信
  13. C++面向对象程序设计——简单的商品销售题
  14. vue + echarts 以山西地图为例
  15. Ios android crash report,iOS App 后台 Crash 调查
  16. php 修改word内容,php如何替换word内容
  17. luoguP2711 小行星
  18. python 换行代码怎么写
  19. CostMonitorUtils耗时监控工具类(线程安全)
  20. Shell中 |和||,和用法

热门文章

  1. DCMTK:使用JPEG-LS传输语法解压缩DICOM文件
  2. VTK:可视化算法之Cutter
  3. VTK:图片之MarkKeypoints
  4. OpenCV演示代码以查找图像中的轮廓(附完整代码)
  5. OpenGL Lightmap光照贴图的实例
  6. OpenGL noperspective在窗口空间中线性插值的实例
  7. C++使用链表实现stack堆栈(附完整源码)
  8. QT的QTextStream类的使用
  9. C++win32平台日志类
  10. kali php 装mongodb,Linux系统如何安装mongodb数据库Mongo扩展