⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 comm_filemgr.c

📁 brew 文件浏览器实现,是纯c编写的
💻 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 + -