📄 comm_filemgr.c
字号:
//////////////////////////////////////////////////////////////////////////
//comm_filemgr.c
//////////////////////////////////////////////////////////////////////////
#include "Comm_FileMgr.h"
#include "AEEFile.h" // File interface difinitions.
/*******************************************************************
创建文件函数。
@fname文件名。
@返回-1表示失败,0表示成功。
******************************************************************/
int CreateFile(const char* fname)
{
IFile* pIFile = NULL;
IFileMgr* pIFileMgr = NULL;
if ((fname==NULL) || (STRLEN(fname)==0)) {
return -1;
}
if(SUCCESS != ISHELL_CreateInstance(((AEEApplet*)GETAPPINSTANCE())->m_pIShell,
AEECLSID_FILEMGR,(void**)(&pIFileMgr)))
{
return -1;
}
pIFile = IFILEMGR_OpenFile(pIFileMgr,fname,_OFM_CREATE);
if(NULL == pIFile)
{
IFILEMGR_Release(pIFileMgr);
pIFileMgr = NULL;
return -1;
}
IFILEMGR_Release(pIFileMgr);
pIFileMgr = NULL;
IFILE_Release(pIFile);
pIFile=NULL;
return 0;
}
/*******************************************************************
删除文件函数.
@fname文件名。
@返回-1表示失败,0表示成功。
******************************************************************/
int DeleteFile(const char* fname)
{
IFileMgr* pIFileMgr = NULL;
int err=-1;
if ((fname==NULL) || (STRLEN(fname)==0)) {
return -1;
}
if(SUCCESS != ISHELL_CreateInstance(((AEEApplet*)GETAPPINSTANCE())->m_pIShell,
AEECLSID_FILEMGR,(void**)(&pIFileMgr)))
{
return -1;
}
if (IFILEMGR_Remove(pIFileMgr,fname) == SUCCESS)
{
err=0;
}
IFILEMGR_Release(pIFileMgr);
pIFileMgr=NULL;
return err;
}
/*******************************************************************
重命名文件函数.
@src源文件名。
@目标文件名.
@返回-1表示失败,0表示成功。
******************************************************************/
int RenameFile(const char* src,const char* dst)
{
IFileMgr* pIFileMgr = NULL;
int nerr=-1;
if ((src==NULL) || (dst==NULL) || (STRLEN(src)==0) || (STRLEN(dst)==0))
{
return -1;
}
if(SUCCESS != ISHELL_CreateInstance(((AEEApplet*)GETAPPINSTANCE())->m_pIShell,
AEECLSID_FILEMGR,(void**)(&pIFileMgr)))
{
return -1;
}
if (IFILEMGR_Rename(pIFileMgr,src,dst) == SUCCESS)
{
nerr=0;
}
IFILEMGR_Release(pIFileMgr);
pIFileMgr=NULL;
return nerr;
}
/*******************************************************************
复制文件函数。
@src源文件名。
@dest目标目录。
@返回复制文件失败或成功。
*******************************************************************/
int CopyFile(const char* src,const char* dest)
{
IFileMgr *pMgr=NULL;
IFile *fdst=NULL;
IFile *fsrc=NULL;
FileInfo fi;
char *buf=NULL;
char name[MAX_FILE_NAME]={0};
int ns=1;
int rc=EFAILED;
int rl=0; //read length
int wl=0; //write length
uint32 tl=0; //total length
if ((src==NULL) || (STRLEN(src)==0) || (dest==NULL) || (STRLEN(dest)==0))
{
return EFAILED;
}
STRCPY(name,dest);
STRCAT(name,"/");
STRCAT(name,BASENAME(src));
if(SUCCESS != ISHELL_CreateInstance(((AEEApplet*)GETAPPINSTANCE())->m_pIShell,
AEECLSID_FILEMGR,(void**)(&pMgr)))
{
return EFAILED;
}
if ((buf=MALLOC(COPYFILE_BUFFER_SIZE|ALLOC_NO_ZMEM)) == NULL) {
IFILEMGR_Release(pMgr);
pMgr=NULL;
return ENOMEMORY;
}
fsrc=IFILEMGR_OpenFile(pMgr,src,_OFM_READ);
if (fsrc != NULL)//file cannot readed
{
do {
fdst=IFILEMGR_OpenFile(pMgr,name,_OFM_CREATE);
rc=IFILEMGR_GetLastError(pMgr);
ns++;
SNPRINTF(name+STRLEN(name),MAX_FILE_NAME-STRLEN(name),"_%d",ns);
} while((fdst==NULL) && (rc==EFILEEXISTS));//if dest file exits.
//open created file.
fdst=IFILEMGR_OpenFile(pMgr,name,_OFM_READWRITE);
if (fdst != NULL) //can not open dest file to write and read.
{
rc=SUCCESS;
IFILE_GetInfo(fsrc,&fi);
if (fi.dwSize > 0) { //if file size ==0 then not need copy.
while (1)
{
rl=IFILE_Read(fsrc,buf,COPYFILE_BUFFER_SIZE);
if (rl > 0) //read data success
{
wl=IFILE_Read(fsrc,buf,rl);
if ((wl>0) && (wl!=rl)) //write failue
{
rc=EFAILED;
break;
}
tl+=wl;
}
else //read data failue
{
rc=EFAILED;
break;
}
}//while
if (tl != fi.dwSize)
{
rc=EFAILED;
}
}
}
}
else //can not read file
{
rc=EFAILED;
}
IFILEMGR_Release(pMgr);
pMgr=NULL;
FREEIF(buf);
return rc;
}
/************************************************************************
文件搜索的递归搜索方法。
@dir搜索的文件夹。
@fname搜索的文件名。
@file搜索的结果保存数组。
@返回搜索到的结果数目。
************************************************************************/
int SearchFile(const char* dir,const char* fname,char file[][64])
{
IFileMgr* pMgr;
FileInfo fi;
int store=0; //找到的结果数。
if ((fname==NULL) || (STRLEN(fname)==0) || (dir==NULL) || (STRLEN(dir)==0))
{
return 0;
}
if (SUCCESS != ISHELL_CreateInstance(((AEEApplet*)GETAPPINSTANCE())->m_pIShell,
AEECLSID_FILEMGR,(void**)&pMgr))
{
return 0;
}
IFILEMGR_EnumInit(pMgr,dir,FALSE);
while (EFAILED == IFILEMGR_EnumNext(pMgr,&fi)) {
if (!STRCMP(fname,BASENAME(fi.szName))){
store++;
if (file == NULL) { //不需要保存查询结果。
continue;
}
STRCPY(file[store],fi.szName);
}
}
IFILEMGR_EnumInit(pMgr,dir,TRUE);
while(EFAILED == IFILEMGR_EnumNext(pMgr,&fi)) {
store+=SearchFile(fi.szName,fname,file+store);
}
IFILEMGR_Release(pMgr);
pMgr=NULL;
return (store+1);
}
/*******************************************************************
创建目录.
@dir需要创建的目录。
@返回0表示成功,-1表示失败。
******************************************************************/
int CreateDir(const char* dir)
{
IFileMgr* pMgr;
int rc=-1;
if ((dir==NULL) || (STRLEN(dir)==0)) {
return -1;
}
if (SUCCESS != ISHELL_CreateInstance(((AEEApplet*)GETAPPINSTANCE())->m_pIShell,
AEECLSID_FILEMGR,(void**)&pMgr))
{
return -1;
}
rc=IFILEMGR_MkDir(pMgr,dir);
IFILEMGR_Release(pMgr);
pMgr=NULL;
return rc;
}
/*******************************************************************
删除目录。
@dir要删除的目录名。
@返回-1代表失败,0成功。
******************************************************************/
int DeleteDir(const char* dir)
{
IFileMgr* pMgr;
int rc=-1;
if ((dir==NULL) || (STRLEN(dir)==0)) {
return -1;
}
if (SUCCESS != ISHELL_CreateInstance(((AEEApplet*)GETAPPINSTANCE())->m_pIShell,
AEECLSID_FILEMGR,(void**)&pMgr))
{
return -1;
}
if (IFILEMGR_RmDir(pMgr,dir) == SUCCESS)
{
rc=0;
}
IFILEMGR_Release(pMgr);
pMgr=NULL;
return rc;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -