error:Cannot create file when that file already exists_
1、程序是调用汤总的程序,应该没什么问题。只是改了某些读取的分区的信息。
2、我把所有的地方都添加了日志,结果却发现还是那个地方出问题:在使用ReadFile读扇区的时候提示,“文件已经存在,不能创建”的错误。
3、听路哥的建议,把这个函数拆的简单点儿,啥都不带,只含日志。结果竟然报“error 87:参数错误”的错误,我更是无语了。
4、后来只能把错误定位在读取扇区的长度上了。一问汤总,才发现读扇区时,只能512位地读,而不是只读4位。
5、读扇区只能一下子读512字节的倍数,读其他的长度只会失败。
正确的代码如下:
#include <windows.h>
#include <stdio.h>
#include <string.h>
#include <iostream>
using namespace std;void main(int argc,char *argv[])
{if (argc<2){return ;}DWORD dwCB;bool ret;LARGE_INTEGER newoffset;LARGE_INTEGER alignedOffset;unsigned long alignedLength = sizeof(unsigned char)*512; //一开始这里是sizeof(unsiged char)*4,于是就出现那个错误。
unsigned int * lpSectBuff = (unsigned int *)malloc(sizeof(unsigned int));alignedOffset.LowPart = 5*512;alignedOffset.HighPart = 0;char devName[100]="\\\\.\\PhysicalDrive0";HANDLE hDev = CreateFile(devName, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);cout<<hDev<<endl;if (hDev == INVALID_HANDLE_VALUE) {printf("ReadSectors device CreateFile handle error ,GetLastError:%lu\n",GetLastError());return ;}else{printf("ReadSectors device CreateFile handle succeed"); }ret = SetFilePointerEx(hDev, alignedOffset, &newoffset, FILE_BEGIN);if (ret== false){printf(" ReadSectors SetFilePointerEx error fail11,GetLastError:%lu\n",GetLastError());CloseHandle(hDev);return ;}else{printf(" ReadSectors SetFilePointerEx succeed\n");}BOOL bRet = ReadFile(hDev, lpSectBuff, alignedLength, &dwCB, NULL);if (bRet == FALSE){printf("ReadSectors_l error,getlasterror:%lu. length= %x\n",GetLastError(),dwCB);CloseHandle(hDev);return ;}else{printf(" ReadSectors_l succeed ,already read length= %x\n",dwCB);}CloseHandle(hDev);return ;}