64,654
社区成员
发帖
与我相关
我的任务
分享
typedef struct
{
unsigned short m_FILEID; //文件ID
unsigned short m_Reserve; //保留,用于4字节对齐
DATA_FILE_ATTR m_attr; //文件属性
}DATA_FILE_LIST;
DATA_FILE_LIST *dataFileList = NULL;
int dataLen = 32*sizeof(DATA_FILE_LIST);
//获取总共所需要的缓冲区长度
dwRet = Dongle_ListFile(hDongle, FILE_DATA, NULL, &dataLen);
if ((dwRet != DONGLE_SUCCESS)&&(dwRet != DONGLE_FILE_NOT_FOUND))
{
AfxMessageBox("获取文件列表缓冲区长度出错!");
dwRet = Dongle_Close(hDongle);
return;
}
if (dwRet == DONGLE_FILE_NOT_FOUND)
{
dataLen = 0;
}
//计算总共有几个文件
int fileCnt = dataLen / sizeof(DATA_FILE_LIST);
//申请内存,并获取列表
if (fileCnt > 0)
{
dataFileList = new DATA_FILE_LIST[sizeof(dataFileList)*fileCnt];
//********************此处用malloc的话可以操作,但是施放有问题*****************
//dataFileList = (DATA_FILE_LIST *)malloc(sizeof(dataFileList)*fileCnt);
dwRet = Dongle_ListFile(hDongle, FILE_DATA, (void *)dataFileList, &dataLen);
if (dwRet != DONGLE_SUCCESS)
{
AfxMessageBox("获取文件列表出错!");
dwRet = Dongle_Close(hDongle);
return;
}
//遍历删除文件
for (int i=0; i<fileCnt; i++)
{
dwRet = Dongle_DeleteFile(hDongle, FILE_DATA, dataFileList[i].m_FILEID);
if (dwRet != DONGLE_SUCCESS)
{
AfxMessageBox("删除文件出错!");
dwRet = Dongle_Close(hDongle);
return;
}
}
if (dataFileList != NULL)
{
delete [] dataFileList;
//**********报堆错误**********
//free(dataFileList);
dataFileList = NULL;
}
}