vc下读写硬盘的操作
2015-05-22 16:50
288 查看
<span style="font-size:18px;color:#cc0000;"> </span><p><span style="font-size:18px;color:#cc0000;">vc下读写硬盘的操作,简单来说就是将硬盘当作是一个文件流来操作:</span></p><p><span style="font-size:18px;color:#cc0000;">下面是实现的函数:</span></p>
//drv 是盘符,一个字符,替换字符串“\\.\A:”中的字符A //startSector 是开始扇区号 //sectors 扇区数量 //lpSectBuff 缓冲区 BOOL CRWSectorsDlg::ReadSectors(char drv, DWORD startSector, WORD sectors, LPBYTE lpSectBuff) { char devName[] = "\\\\.\\A:"; devName[4] =drv; //打开指定分区 HANDLE hDev=CreateFile(devName, GENERIC_READ, FILE_SHARE_WRITE,NULL, OPEN_EXISTING, 0, NULL); if(hDev==INVALID_HANDLE_VALUE) return 0; //将文件指针指向起始扇区 SetFilePointer(hDev,512*startSector,0,FILE_BEGIN); DWORD dwCB; //读取指定数量的扇区 BOOL bRet=ReadFile(hDev,lpSectBuff,512*sectors,&dwCB,NULL); CloseHandle(hDev); return bRet; } BOOL CRWSectorsDlg::WriteSectors( char drv, DWORD startSector, WORD sectors, LPBYTE lpSectBuff ) { char devName[] = "\\\\.\\A:"; devName[4] =drv; HANDLE hDev=CreateFile(devName, GENERIC_WRITE, FILE_SHARE_WRITE,NULL, OPEN_EXISTING, 0, NULL); if(hDev==INVALID_HANDLE_VALUE) return 0; SetFilePointer(hDev,512*startSector,0,FILE_BEGIN); DWORD dwCB; BOOL bRet=WriteFile(hDev,lpSectBuff,512*sectors,&dwCB,NULL); CloseHandle(hDev); return bRet; }
下边是用vc控制台程序实现的一个读取硬盘分区大小的简单代码(win7下好像不能读取到C盘的信息,暂时不知道为什么)
#include <stdio.h> #include <stdlib.h> #include <WTypes.h> int main() { LONGLONG lPartBegin, lPartEnd; DWORD dwOutByte; // DeviceIoControl 读取的字节数 DISK_GEOMETRY diskGeometry; DWORD dwSectorByte; HANDLE m_hDriver; //char Drive[] = "////.//PHYSICALDRIVE0"; ///// ("\\\\.\\D:") // disk D: m_hDriver = CreateFile(("\\\\.\\D:"), GENERIC_READ, FILE_SHARE_READ,NULL, OPEN_EXISTING, 0, NULL); if(m_hDriver == INVALID_HANDLE_VALUE) { return FALSE; } // GENERIC_READ FILE_SHARE_READ // GENERIC_WRITE FILE_SHARE_WRITE // ReadFile(m_hDriver, ...); // 读取每扇区字节数 BOOL bDeviceRet = DeviceIoControl(m_hDriver, IOCTL_DISK_GET_DRIVE_GEOMETRY, NULL, 0, &diskGeometry, sizeof(DISK_GEOMETRY), &dwOutByte, NULL); // 每扇区字节数 dwSectorByte = diskGeometry.BytesPerSector; // 读取分区大小和偏移量 PARTITION_INFORMATION partInfo; bDeviceRet = DeviceIoControl(m_hDriver, IOCTL_DISK_GET_PARTITION_INFO, NULL, 0, &partInfo, sizeof(PARTITION_INFORMATION), &dwOutByte, NULL); LONGLONG lPartitionSize = partInfo.PartitionLength.QuadPart; // 分区的大小 LONGLONG lOffset = partInfo.StartingOffset.QuadPart; // 偏移 // StartingOffset 除以每扇区字节数就是开始扇区; // PartitionLength 除以每扇区字节数就是扇区总数。 lPartBegin = lOffset / dwSectorByte; lPartEnd = lPartitionSize / dwSectorByte; // 开始扇区加上扇区总数再减去1就是结束扇区。 lPartEnd += lPartBegin; //lOffset; lPartEnd -= 1; return 0; }
相关文章推荐
- VC 对Access数据库读写操作实例
- VC文件读写操作总结
- VC 对Access数据库读写操作实例
- VC 对Access数据库读写操作实例
- VC与EVC注册表读写操作对比
- VC 对Access数据库读写操作实例
- Mac 挂载NTFS移动硬盘进行读写操作 Readonly file system
- VC 对Access数据库读写操作实例
- Mac 挂载NTFS移动硬盘进行读写操作 (Read-only file system)
- VC 对Access数据库读写操作实例
- 大容量硬盘的读写操作
- 如何将NTFS格式的移动硬盘挂接到Mac OS上进行读写(Read/Write)操作
- VC中注册表的读写修改操作
- vc操作word读写
- VC 对Access数据库读写操作实例
- VC 对Access数据库读写操作实例
- VC 快速创建多层文件夹&文件的创建、打开、读写、操作
- 通过文件的方式对硬盘扇区进行直接读写操作
- VC对csv文件进行读写操作
- VC操作word和excel文件,查询与读写[依赖office环境]