删除文件删除不了
我在使用网络接收了临时的数据,但是接收完成后,不能删除这个文件,使用IFILEMGR_GetLastError 得到 EFILEOPEN。但是 我已经释放了,不知道问题出在哪,下面是我的代码。麻烦大侠们看看
--------------------编程问答-------------------- 关闭文件后还要删除文件
void WebLoginCB(void *pUser)
{
char *buffer=NULL;
AECHAR wBuf[20]={0};
int byteCount=0,nRet = 0;
IFileMgr *pIFileMgr;
IFile *pIFile;
njmengniu *pMe = (njmengniu *)pUser;
WebRespInfo *pWebRespInfo = IWEBRESP_GetInfo(pMe->m_pIWebResp);
DBGPRINTF("Wen response result:%d",pWebRespInfo->nCode);
if (pWebRespInfo)
{
if (!WEB_ERROR_SUCCEEDED(pWebRespInfo->nCode))
{
WebCleanup(pMe);
DBGPRINTF("Error occur...");
pMe->m_appThirdState = APP_STATE_SENDDONE;
ShowAlertMessage(pMe,IDS_COMMON_SENDFAIL,FALSE);
}
else
{
ISource* pISource = pWebRespInfo->pisMessage;
buffer = (char *)MALLOC(200);
MEMSET(buffer,0,200);
if (!buffer)
{
return ;
}
byteCount = ISOURCE_Read(pISource,buffer,200);
if (ISHELL_CreateInstance(pMe->a.m_pIShell,AEECLSID_FILEMGR,(void **)&pIFileMgr) != SUCCESS)
{
FREEIF(buffer);
return;
}
if (pMe->m_focusItem == IDS_COMMON_LOGO)
{
pIFile= IFILEMGR_OpenFile(pIFileMgr,DATA_RECEIVE,_OFM_READWRITE);
if (pIFile == NULL)
{
DBGPRINTF("Open file failed");
pIFile= IFILEMGR_OpenFile(pIFileMgr,DATA_TEMPRECEIVE,_OFM_CREATE);
}
IFILE_Seek(pIFile,_SEEK_END,0);
}
else
{
DBGPRINTF("Not logo");
pIFile= IFILEMGR_OpenFile(pIFileMgr,DATA_TEMPRECEIVE,_OFM_READWRITE);
if (pIFile == NULL)
{
DBGPRINTF("Create new DATA_TEMPRECEIVE");
pIFile= IFILEMGR_OpenFile(pIFileMgr,DATA_TEMPRECEIVE,_OFM_CREATE);
//return ;
}
IFILE_Seek(pIFile,_SEEK_END,0);
}
while(byteCount != ISOURCE_END && byteCount != ISOURCE_ERROR)
{
if (byteCount != ISOURCE_WAIT)
IFILE_Write(pIFile, buffer, byteCount);
else
{
ISOURCE_Readable(pISource, &pMe->m_Callback);
FREEIF(buffer);
return;
}
byteCount = ISOURCE_Read(pISource, buffer, 200);
}
FREEIF(buffer);
ISOURCE_Release(pISource);
nRet = IFILE_Release(pIFile);
DBGPRINTF("IFILE_Release:%d",nRet);
nRet = IFILEMGR_Release(pIFileMgr);
DBGPRINTF("IFILEMGR_Release:%d",nRet);
if (byteCount == ISOURCE_END)
{
ConvertToUnicode(pMe,buffer);
switch (pMe->m_focusItem)
{
case IDS_COMMON_LOGO:
AnalysisLogin(pMe);
break;
case IDS_MAINMENU_GOODSREACH:
AnalysisGoods(pMe);
break;
case IDS_MAINMENU_ORDERREACH:
AnalysisReach(pMe);
break;
case IDS_MAINMENU_LOOKUPSTOCK:
AnalysisStock(pMe);
break;
}
WebCleanup(pMe);
pMe->m_appThirdState = APP_SUBSTATE_ROOT;
}
if(byteCount == ISOURCE_ERROR)
{
DBGPRINTF("Error occured.");
}
}
}
}
此函数用于删除由给定文件名标识的文件。
int IFILEMGR_Remove
(
IFileMgr * pIFileMgr,
const char * pszName
)
SUCCESS: 如果成功
EFAILED: 如果失败
代码修改为:
FREEIF(buffer);
ISOURCE_Release(pISource);
nRet = IFILE_Release(pIFile);
DBGPRINTF("IFILE_Release:%d",nRet);
nRet = IFILEMGR_Remove(pIFileMgr,DATA_TEMPRECEIVE);
nRet = IFILEMGR_Release(pIFileMgr);
DBGPRINTF("IFILEMGR_Release:%d",nRet);
--------------------编程问答-------------------- 你在哪里调用的remove? --------------------编程问答-------------------- 重置下文件指针:
IFILE_Seek(pIFile, _SEEK_START, 0);
再去Move --------------------编程问答-------------------- 先要释放掉pIFile指针的,不然删除的文件还是在被使用中
补充:移动开发 , Brew