bool FileSecWrite(char* cpWrBuf, char cTarSecNbr)
{
char cRx[10];
int nLocPt=0;
char cPasSecNbr = 0;
do
{
if( CH_.SecWrite(cTarSecNbr) != 0x14 ) return false;//申請(qǐng)寫入個(gè)數(shù)
if( CH_.ReadEP0(cRx) == 0x00 ) return false;
cPasSecNbr = cRx[1];????????????????????????????????//實(shí)際寫入個(gè)數(shù)
if( CH_.DiskWrite(*(int*)&cRx[5], cPasSecNbr) != 0x1E ) return false;
do{
CH_.WrHostData(cpWrBuf + nLocPt, 64);
nLocPt += 64;
}while( CH_.DiskWriteGo() == 0x1E );
cTarSecNbr -= cPasSecNbr;????????????????//更新下次申請(qǐng)寫入個(gè)數(shù)
}while(cTarSecNbr != 0x00);????//若剩余寫入個(gè)數(shù)為0則退出
return true;
}
//函數(shù)外面會(huì)Close這個(gè)文件以修改文件長(zhǎng)度
以上代碼能運(yùn)行到true,而且為了實(shí)驗(yàn)方便,也不采用太大的cTarSecNbr值(取8)。整個(gè)流程大概如下:
申請(qǐng)寫入cTarSecNbr個(gè)扇區(qū)----》0x27命令讀返回,取得當(dāng)前文件LBA(即*(int*)&cRx[5])和允許本次寫入扇區(qū)數(shù)目cPasSecNbr----》以64個(gè)字節(jié)為一次數(shù)據(jù)傳送,直到本次扇區(qū)數(shù)目寫完,即調(diào)用WrHostData寫入數(shù)據(jù)cPasSecNbr乘以8這么多次----》檢查還有沒(méi)有剩下的未完成扇區(qū),有則循環(huán),無(wú)則退出----》關(guān)閉文件。
但實(shí)驗(yàn)結(jié)果總是出乎意料,不能寫入,求各位幫助解答~~~謝謝~