我正在SD/SD卡上寫入/讀取原始數據。編寫代碼的工作時間約爲4700塊,並在此限制後失敗。這裏是代碼:對於> 4700塊(SD卡原始寫入/窗口),WriteFile失敗
//Data to be written
uint8_t* sessions;
sessions = (uint8_t *) malloc(2048*sizeof(uint8_t));
unsigned int i;
for(i=0;i<(2048*sizeof(uint8_t));i++) sessions[i]=8;
DWORD dwWrite;
HANDLE hDisk=CreateFileA("\\\\.\\K:", // drive to open = SD CARD
GENERIC_WRITE, // access to the drive
FILE_SHARE_READ | // share mode
FILE_SHARE_WRITE,
NULL, // default security attributes
OPEN_EXISTING, // disposition
FILE_FLAG_NO_BUFFERING, // file attributes
NULL); // do not copy file attributes
if(hDisk==INVALID_HANDLE_VALUE)
{
CloseHandle(hDisk);
printf("ERROR opening the file !!! ");
}
DWORD dwPtr = SetFilePointer(hDisk,10000*512,0,FILE_BEGIN); //4700 OK
if (dwPtr == INVALID_SET_FILE_POINTER) // Test for failure
{
printf("CANNOT move the file pointer !!! ");
}
//Try using this structure but same results: CAN BE IGNORED
OVERLAPPED osWrite = {0,0,0};
memset(&osWrite, 0, sizeof(osWrite));
osWrite.Offset = 10000*512; //4700 OK
osWrite.hEvent = CreateEvent(FALSE, FALSE, FALSE, FALSE);
if(FALSE == WriteFile(hDisk,sessions,2048,&dwWrite,&osWrite)){
printf("CANNOT write data to the SD card!!! %lu",dwWrite);
}else{
printf("Written %lu on SD card",dwWrite);
}
CloseHandle(hDisk);
問題是與函數「Writefile」(windows.h)。如果塊號小於4700,則一切正常(數據寫入SD卡),但如果塊號爲5000或10000,則該功能將失敗「寫入0」。
注意,如果沒有FILE_FLAG_NO_BUFFERING,沒辦法打開驅動器(SD卡)。 「重疊」是一個失敗的嘗試,使其工作,不使用它(WriteFile(hDisk,會話,2048,& dwWrite,NULL))導致相同的行爲。 「SetFilePointer」也適用於高於4700的模塊。還測試了2個不同的SD卡。我在Windows 10上。
有什麼暗示發生了什麼?
謝謝您的輸入
GetLastError在什麼? – RbMm
你真的想寫邏輯驅動器(SD卡上的分區),而不是物理驅動器(SD卡本身)? –