📄 usbulkctl.cpp
字号:
iClass = lFolder.Find("/",i);
if(iClass<0) break;
if(iClass>i)
{
strXML = strXML + "\t</folder>\r\n";
}
i=iClass;
}
}
else //当前和上次路径有不同,则回到二者的父目录
{
//前面已经判断过二者是否互相包含,因此其相同部分肯定小于其中任意一方的长度
CString t;
for(i=0;i<lFolder.GetLength();i++)
{
if(lFolder[i]==iFolder[i])
{
t = t + lFolder[i];
}
else
{
//截取二者的父目录,t中可能包含文件夹名称前面相同部分,必须去掉
for(i=t.GetLength()-1;i>=0;i--)
{
if(t[i]=='/')
{
t = t.Left(i);
break;
}
}
break;
}
}
//关闭上个目录
for(int i=t.GetLength();i<lFolder.GetLength();i++)
{
iClass = lFolder.Find("/",i);
if(iClass<0) break;
if(iClass>i)
{
strXML = strXML + "\t</folder>\r\n";
}
i=iClass;
}
//建立新目录
for(i=t.GetLength();i<iFolder.GetLength();i++)
{
iClass = iFolder.Find("/",i);
if(iClass<0) break;
if(iClass>i)
{
lFolder = iFolder.Mid(i,iClass-i);
if(lFolder=="table")
{
lFolder = lFolder;
}
strXML = strXML + "\t<folder name=\"" + lFolder + "\">\r\n";
}
i=iClass;
}
}
}
lFolder = iFolder;
}
strXML = strXML + "\t\t<file name=\"" + strTmp.Right(strTmp.GetLength()-iFolder.GetLength()) + "\"/>\r\n";
strResult = strResult + strTmp + "," ;
strTmp = "";
}
iTxBuf+=rxLength;
}
//处理隔离器错误报告
if (*((WORD *)txBlk+0)==0x5245)
{
strResult.Format("%1x",*((char *)txBlk+4));
strResult = "Err:" + strResult;
iTxBuf+=rxLength;
//break;
}
//包序号为0x00时,结束
if (*((char *)txBlk+2)==0x00)
{
lClass = iFolder.GetLength();
for(int i=1;i<lFolder.GetLength();i++)
{
iClass = lFolder.Find("/",i);
if(iClass<0) break;
if(iClass>i)
{
strXML = strXML + "\t</folder>\r\n";
}
i=iClass;
}
strXML = strXML + "\t</folder>\r\n</SEARCHFILES>";
res = strXML.GetLength();
strResult = strXML; //直接返回xml
//*****dwNum = MultiByteToWideChar (CP_ACP, 0, strXML, -1, NULL, 0);
//*****pwText = new wchar_t[dwNum];
//*****MultiByteToWideChar (CP_ACP, 0, strXML, -1, pwText, dwNum);
break;
}
}
//处理数据
CFile nTargetFile;
CString tFileName;
//$$$$$$$$$$$$$$CTime t1=CTime::GetCurrentTime();
tFileName = "C:\\filename.xml";
//$$$$$$$$$$$$$$tFileName.Format("C:\\Windows\\%04d-%02d-%02d.log",t1.GetYear(),t1.GetMonth(),t1.GetDay());
if(nTargetFile.Open(_T(tFileName), CFile::modeCreate | CFile::modeWrite)==0)
//$$$$$$$$$$$$$$if(nTargetFile.Open(_T(tFileName), CFile::modeNoTruncate | CFile::modeCreate | CFile::modeReadWrite)==0)
{
strResult.Format("Err: Create file <%s> Fail.",tFileName);
free((void *)rxBuf);
//*****delete []pwText;
RecordLog("SearchFiles",extName,strResult);
return strResult.AllocSysString();
}
//*****WORD wSignature = 0xFEFF; //Unicode文件标志
//*****nTargetFile.Write(&wSignature, 2);
//*****nTargetFile.Write(pwText,lstrlenW(pwText) * sizeof(WCHAR));
//*****delete []pwText;
nTargetFile.Write(strXML,strXML.GetLength());
//$$$$$$$$$$$$$$strXML = t1.Format("%H:%M:%S") + "\tSearchFiles\t" + extName + "\tsuccess\r\n";
//$$$$$$$$$$$$$$nTargetFile.SeekToEnd();
nTargetFile.Write(strXML,strXML.GetLength());
nTargetFile.Close();
free((void *)rxBuf);
// close devices if needed
//if(hRead != INVALID_HANDLE_VALUE)
CloseHandle(hRead);
}
//strResult.Replace("/","\\"); //返回带逗号的文本
RecordLog("SearchFiles",extName,"0");
return strResult.AllocSysString();
}
BSTR CUsbulkCtrl::GetFileName(LPCTSTR sDir, LPCTSTR extName)
{
CString strResult;
CString strXML;
CString strTmp;
//int crc;
DWORD res;
int NameLen;
strTmp = sDir;
strXML = "<?xml version=\"1.0\" encoding=\"Unicode\" ?>\r\n<GETFILENAME>\r\n";
//*****strXML = "<?xml version=\"1.0\" encoding=\"GB2312\" ?>\r\n<GETFILENAME>\r\n";
strXML = strXML + "\t<dir name=\"\\" + strTmp + "\">\r\n";
NameLen = strTmp.GetLength();
//txBufSize = NameLen+10;
txBufSize = NameLen+8;
txBuf=(char *)malloc(txBufSize);
if(txBuf==NULL)
{
strResult = TEXT("Err: Memory Allocation Fail:(%d)\n"),txBufSize; //内存不够
return strResult.AllocSysString();
}
*((DWORD *)txBuf+0) = 0x0001101B;
*((DWORD *)txBuf+1) = txBufSize-2;
memcpy((char *)txBuf+8, strTmp,NameLen);
//crc = GetCRC16((unsigned char *)txBuf,txBufSize-2);
//*((WORD *)(txBuf+8+NameLen))=crc; //attach checksum
res = SendToUSB64((void *)0); //发送文件名及文件路径
DWORD dwNum;
wchar_t *pwText;
strTmp = "";
if (res==(int)txBufSize)
{
UINT success;
UINT rxLength=64;
ULONG respLen;
char *rxBuf;
void *txBlk;
rxBuf = (char *)malloc(rxLength*1000);
if(rxBuf==NULL)
{
strResult = TEXT("Err: Memory Allocation Fail:(%d)\n"),rxLength*1000; //内存不够
return strResult.AllocSysString();
}
hRead = open_file(inPipe);
while(1)
{
txBlk=(void *)(rxBuf+iTxBuf);
success = ReadFile(hRead,txBlk,rxLength,&respLen,NULL);
if (*((WORD *)txBlk+0)==0x4B4F)
{
NameLen = *((char *)txBlk+3)-4;
for(int i=0;i<NameLen;i++)
{
strTmp = strTmp + *((char *)txBlk+4+i);
}
if ((*((char *)txBlk+2)!=0x01) && (strTmp.Find(extName)>=0))
{
strXML = strXML + "\t\t<file name=\"" + strTmp + "\"/>\r\n";
strResult = strResult + strTmp + ",";
strTmp = "";
}
else if(*((char *)txBlk+2)==0x02) strTmp = "";
iTxBuf+=rxLength;
}
//处理隔离器错误报告
if (*((WORD *)txBlk+0)==0x5245)
{
strResult.Format("%1x",*((char *)txBlk+4));
strResult = "Err:" + strResult;
iTxBuf+=rxLength;
//break;
}
//包序号为0x00时,结束
if (*((char *)txBlk+2)==0x00)
{
strXML = strXML + "\t</dir>\r\n</GETFILENAME>";
res = strXML.GetLength();
dwNum = MultiByteToWideChar (CP_ACP, 0, strXML, -1, NULL, 0);
pwText = new wchar_t[dwNum];
MultiByteToWideChar (CP_ACP, 0, strXML, -1, pwText, dwNum);
if ((!strResult.IsEmpty()) && (strResult.Right(1)!=",")) strResult = strResult + ",";
break;
}
}
//处理数据
CFile nTargetFile;
CString tFileName;
tFileName = "C:\\filename.xml";
if(nTargetFile.Open(_T(tFileName), CFile::modeCreate | CFile::modeWrite)==0)
{
strResult.Format("Err: Create file <%s> Fail.",tFileName);
free((void *)rxBuf);
delete []pwText;
return strResult.AllocSysString();
}
WORD wSignature = 0xFEFF; //Unicode文件标志
nTargetFile.Write(&wSignature, 2);
nTargetFile.Write(pwText,lstrlenW(pwText) * sizeof(WCHAR));
delete []pwText;
//nTargetFile.Write(rxBuf,iTxBuf);
nTargetFile.Close();
free((void *)rxBuf);
// close devices if needed
//if(hRead != INVALID_HANDLE_VALUE)
CloseHandle(hRead);
}
return strResult.AllocSysString();
}
BSTR CUsbulkCtrl::GetFolderName(LPCTSTR sDir)
{
CString strResult;
CString strTmp;
CString strXML;
//int crc;
DWORD dwNum;
wchar_t *pwText;
DWORD res;
int NameLen;
strTmp = sDir;
strXML = "<?xml version=\"1.0\" encoding=\"Unicode\" ?>\r\n<GETFOLDERNAME>\r\n";
strXML = strXML + "\t<dir name=\"\\" + strTmp + "\">\r\n";
NameLen = strTmp.GetLength();
//txBufSize = NameLen+10;
txBufSize = NameLen+8;
txBuf=(char *)malloc(txBufSize);
if(txBuf==NULL)
{
strResult = TEXT("Err: Memory Allocation Fail:(%d)\n"),txBufSize; //内存不够
//strResult = "1";
return strResult.AllocSysString();
}
*((DWORD *)txBuf+0) = 0x000B101B;
*((DWORD *)txBuf+1) = txBufSize-2;
memcpy((char *)txBuf+8, strTmp,NameLen);
//crc = GetCRC16((unsigned char *)txBuf,txBufSize-2);
//*((WORD *)(txBuf+8+NameLen))=crc; //attach checksum
res = SendToUSB64((void *)0); //发送文件名及文件路径
strTmp = "";
if (res==(int)txBufSize)
{
UINT success;
UINT rxLength=64;
ULONG respLen;
ULONG iLen;
char *rxBuf;
void *txBlk;
rxBuf = (char *)malloc(rxLength*1000);
if(rxBuf==NULL)
{
strResult = TEXT("Err: Memory Allocation Fail:(%d)\n"),rxLength*1000; //内存不够
return strResult.AllocSysString();
}
hRead = open_file(inPipe);
iLen = 0;
while(1)
{
txBlk=(void *)(rxBuf+iTxBuf);
//txBlk = (void *)malloc(rxLength);
success = ReadFile(hRead,txBlk,rxLength,&respLen,NULL);
if (*((WORD *)txBlk+0)==0x4B4F)
{
NameLen = *((char *)txBlk+3)-4;
for(int i=0;i<NameLen;i++)
{
strTmp = strTmp + *((char *)txBlk+4+i);
}
if (*((char *)txBlk+2)==0x02)
{
strXML = strXML + "\t\t<folder name=\"" + strTmp + "\"/>\r\n";
strResult = strResult + strTmp + ",";
strTmp = "";
}
else if(*((char *)txBlk+2)==0x02) strTmp = "";
iTxBuf+=rxLength;
}
//处理隔离器错误报告
if (*((WORD *)txBlk+0)==0x5245)
{
strResult.Format("%1x",*((char *)txBlk+4));
strResult = "Err:" + strResult;
iTxBuf+=rxLength;
//break;
}
//包序号为0x00时,结束
if (*((char *)txBlk+2)==0x00)
{
strXML = strXML + "\t</dir>\r\n</GETFOLDERNAME>";
res = strXML.GetLength();
dwNum = MultiByteToWideChar (CP_ACP, 0, strXML, -1, NULL, 0);
pwText = new wchar_t[dwNum];
MultiByteToWideChar (CP_ACP, 0, strXML, -1, pwText, dwNum);
strResult = strResult + strTmp;
if ((!strResult.IsEmpty()) && (strResult.Right(1)!=",")) strResult = strResult + ",";
break;
}
}
//处理数据
CFile nTargetFile;
CString tFileName;
tFileName = "C:\\filename.xml";
if(nTargetFile.Open(_T(tFileName), CFile::modeCreate | CFile::modeWrite)==0)
{
strResult.Format("Err: Create file <%s> Fail.",tFileName);
free((void *)rxBuf);
delete []pwText;
return strResult.AllocSysString();
}
WORD wSignature = 0xFEFF; //Unicode文件标志
nTargetFile.Write(&wSignature, 2);
nTargetFile.Write(pwText,lstrlenW(pwText) * sizeof(WCHAR));
delete []pwText;
nTargetFile.Close();
free((void *)rxBuf);
// close devices if needed
//if(hRead != INVALID_HANDLE_VALUE)
CloseHandle(hRead);
}
return strResult.AllocSysString();}
BOOL CUsbulkCtrl::DeleteDir(LPCTSTR sDir)
{
CString filePath;
//int crc;
DWORD res;
int NameLen;
filePath = sDir;
if(filePath.Right(1)!="/")
filePath = filePath + "/";
filePath.Replace("//","/");
NameLen = filePath.GetLength();
//txBufSize = NameLen+10;
txBufSize = NameLen+8;
txBuf=(char *)malloc(txBufSize);
if(txBuf==NULL)
{
return FALSE;
}
/*
txBufSize = NameLen+10;
int ii = 64 - (txBufSize % 64);
txBufSize = txBufSize +ii;
txBuf=(char *)malloc(txBufSize);
*/
*((DWORD *)txBuf+0) = 0x0007101B;
*((DWORD *)txBuf+1) = txBufSize-2;
//*((DWORD *)txBuf+1) = NameLen+8;
memcpy((char *)txBuf+8, filePath,NameLen);
//crc = GetCRC16((unsigned char *)txBuf,txBufSize-2);
//*((WORD *)(txBuf+8+NameLen))=crc; //attach checksum
//for (int i=0;i<ii;i++)
// *((char *)txBuf + NameLen + 10 + i) = 0x00;
res = SendToUSB64((void *)0); //发送文件名及文件路径
if (res==(int)txBufSize)
{
UINT success;
UINT rxLength=64;
ULONG respLen;
char *rxBuf;
rxBuf = (char *)malloc(rxLength);
if(rxBuf==NULL)
{
return FALSE;
}
hRead = open_file(inPipe);
success = ReadFile(hRead,rxBuf,rxLength,&respLen,NULL);
if (*((WORD *)rxBuf+0)==0x4B4F)
{
res = 0;
}
else
{
if (*((WORD *)rxBuf+0)==0x5245)
{
res = -1;
}
else
res = -2;
}
free((void *)rxBuf);
// close devices if needed
//if(hRead != INVALID_HANDLE_VALUE)
CloseHandle(hRead);
}
if (res == 0)
{
return TRUE;
}
else
{
return FALSE;
}
}
void CUsbulkCtrl::ResetDevice()
{
// TODO: Add your dispatch handler code here
hRead = open_file(inPipe);
reset_dev(hRead);
CloseHandle(hRead);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -