Keep on going, never give up.

VC上如何读写磁盘扇区

VC直接读写磁盘扇区方法很简单,示例如下(读写F盘):

TCHAR comBuf[] = _T(" \\\\.\\F:");
HANDLE ghFile = INVALID_HANDLE_VALUE;
ghFile = CreateFile(
	comBuf,//path
	GENERIC_READ,
	FILE_SHARE_READ,
	NULL,
	OPEN_EXISTING,
	0,
	0
	);
if (ghFile == INVALID_HANDLE_VALUE) {
	return;
}

//Test begin
DWORD dwLen = 0;
UINT32 lba = 1;
UINT8 buf[512];
UINT8 blocks = 1;
SetFilePointer(ghFile, lba * 512, NULL, FILE_BEGIN);
ReadFile(ghFile, (LPVOID)buf, blocks * 512, & dwLen, NULL);

//Close handle
if (ghFile != INVALID_HANDLE_VALUE) {
	CloseHandle(ghFile);
	ghFile = INVALID_HANDLE_VALUE;
}

其中,驱动器参数的格式有两种写法,具体可参考微软官方介绍:

https://msdn.microsoft.com/en-us/library/windows/desktop/aa363858(v=vs.85).aspx

另外,上文读写扇区跟文件无缓存读写有点区别,如果是读取C:\\XXX.BIN,方法如下:

ghFile = CreateFile(
    filePath,//path
    GENERIC_READ | GENERIC_WRITE,
    0,
    NULL,
    OPEN_EXISTING,
    FILE_ATTRIBUTE_HIDDEN | FILE_FLAG_RANDOM_ACCESS | FILE_FLAG_NO_BUFFERING,
    NULL
    );

其它读写语句类似。

相关评论(0):  

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

订阅博客

最新文章

本站采用创作共用版权协议, 要求署名、非商业用途和保持一致. 转载也必须遵循“署名-非商业用途-保持一致”的创作共用协议. 返回顶部
Copyright@2005-2016 Metsky.com, All rights Reserved.