我想写个程序测试当前硬盘读写速度,请教大家相关思路!以及相关API函数。
谢谢!

解决方案 »

  1.   

    HANDLE hDev = CreateFile("\\\\.\\PHYSICALDRIVE0",.............)打开物理硬盘0
    ReadFile(hDev.........)读物理硬盘
    WriteFile(hDev........)写物理硬盘
    CloseHandle(hDev);关闭不能用在win9x下。
      

  2.   

    测试速度可能要写随机数,否则会有缓存的问题影响真实性,建议长时间读写硬盘来取平均数。
    楼上说的函数需要管理员权限。Win98下使用中断可以读取,CSDN上有可以读写的类
      

  3.   

    http://dev.csdn.net/develop/article/20/20550.shtm
    在Windows NT/2K/XP中,直接用CreateFile打开名称类似于"\\.\A:"的”文件”,就可以与设备驱动打交道,通过ReadFile/WriteFile以绝对地址方式访问磁盘了。但Windows 9X不支持这样的简单方法。本文介绍一种在Windows 9X中实现磁盘直接访问的方法:利用系统的vwin32.vxd,通过DeviceIoControl调用DOS INT21 7305H与440DH功能来完成。该调用支持FAT12、FAT16和FAT32,适用于Windows 95 SR2以及更高版本。 
      

  4.   

    楼上说的通过DeviceIoControl调用DOS INT21 7305H与440DH功能只能来操作逻辑硬盘,就是说按分区操作,不能操作物理盘,9x操作物理盘的方法目前我知道的只能是自己来写vxd。
    9x下好象有一种可以通过vwin32.vxd操作物理盘的,具体的方法记不清了,但那只能操作软盘。
      

  5.   

    HANDLE hDev = CreateFile("\\\\.\\PHYSICALDRIVE0",.............)打开物理硬盘0
    ReadFile(hDev.........)读物理硬盘
    WriteFile(hDev........)写物理硬盘
    CloseHandle(hDev);关闭这种方法为什么在第4200000个绝对扇区之后取出来的数据就不对了啊
    是不是需要设置什么参数,请高手指点!!!!!!!!!!
      

  6.   

    主要是因为SetFilePointer这个函数在移动超过2G的偏移时,不能像平时那样做了,根据你的代码应该这样:
    m_start_sec = 4200000;LARGE_INTEGER offset;
    offset.u.HighPart = 0;
    offset.u.LowPart = m_start_sec;
    SetFilePointer( m_dev, offset.u.LowPart, &offset.u.HighPart, FILE_BEGIN );
    然后就可以了。
      

  7.   

    错了一点,是
    offset.u.LowPart = m_start_sec * 512;