C++实现的 如何删除一个指定的文件
2014-09-04 13:20
585 查看
开发项目时,FreeEIM 需要用到删除文件,代码是C++实现的,如何删除一个指定的文件。
c++语言本身是不能删除文件或文件夹的,他们是windows操作系统里的东西,所以得借助其api函数。
其一:使用shell 接口:
void FileDelete(CString directory)
{
SHFILEOPSTRUCT shFileOp;
char strCurrentPath[MAX_PATH];
memset(&shFileOp,0,sizeof(shFileOp));
GetCurrentDirectory(MAX_PATH,strCurrentPath);
strcat_s(strCurrentPath,sizeof(strCurrentPath),directory);
strCurrentPath[strlen(strCurrentPath)+1] = 0;
shFileOp.wFunc = FO_DELETE;
shFileOp.pFrom = strCurrentPath;
shFileOp.pTo = NULL;
shFileOp.fFlags = FOF_SILENT | FOF_NOCONFIRMATION | FOF_NOCONFIRMMKDIR;
SHFileOperation(&shFileOp);
}
使用该函数你得 #include<Shlwapi.h> #pragma comment(lib,"Shlwapi.lib") 使用他可以将directory和其下的所有文件静默删除,听说在删除共享文件夹的时候会出错或提示,没试过。不过我使用system()做删除的时候共享文件夹下的删除是会出错的。
其二: 使用MFC的CFileFind递归遍历文件并删除文件和文件夹
bool DeleteDirectory(char* strDirName)
{
CFileFind tempFind;
char strTempFileFind[MAX_PATH];
sprintf(strTempFileFind,"%s//*.*", strDirName);
BOOL IsFinded = tempFind.FindFile(strTempFileFind);
while (IsFinded)
{
IsFinded = tempFind.FindNextFile();
if (!tempFind.IsDots())
{
char strFoundFileName[MAX_PATH];
strcpy(strFoundFileName, tempFind.GetFileName().GetBuffer(MAX_PATH));
if (tempFind.IsDirectory())
{
char strTempDir[MAX_PATH];
sprintf(strTempDir,"%s//%s", strDirName, strFoundFileName);
DeleteDirectory(strTempDir);
}
else
{
char strTempFileName[MAX_PATH];
sprintf(strTempFileName,"%s//%s", strDirName, strFoundFileName);
DeleteFile(sTempFileName);
}
}
}
tempFind.Close();
if(!RemoveDirectory(strDirName))
{
return FALSE;
}
return TRUE;
}
//////////////////////////////////////////////////////////////////////////////////////
c++语言本身是不能删除文件或文件夹的,他们是windows操作系统里的东西,所以得借助其api函数。
其一:使用shell 接口:
void FileDelete(CString directory)
{
SHFILEOPSTRUCT shFileOp;
char strCurrentPath[MAX_PATH];
memset(&shFileOp,0,sizeof(shFileOp));
GetCurrentDirectory(MAX_PATH,strCurrentPath);
strcat_s(strCurrentPath,sizeof(strCurrentPath),directory);
strCurrentPath[strlen(strCurrentPath)+1] = 0;
shFileOp.wFunc = FO_DELETE;
shFileOp.pFrom = strCurrentPath;
shFileOp.pTo = NULL;
shFileOp.fFlags = FOF_SILENT | FOF_NOCONFIRMATION | FOF_NOCONFIRMMKDIR;
SHFileOperation(&shFileOp);
}
使用该函数你得 #include<Shlwapi.h> #pragma comment(lib,"Shlwapi.lib") 使用他可以将directory和其下的所有文件静默删除,听说在删除共享文件夹的时候会出错或提示,没试过。不过我使用system()做删除的时候共享文件夹下的删除是会出错的。
其二: 使用MFC的CFileFind递归遍历文件并删除文件和文件夹
bool DeleteDirectory(char* strDirName)
{
CFileFind tempFind;
char strTempFileFind[MAX_PATH];
sprintf(strTempFileFind,"%s//*.*", strDirName);
BOOL IsFinded = tempFind.FindFile(strTempFileFind);
while (IsFinded)
{
IsFinded = tempFind.FindNextFile();
if (!tempFind.IsDots())
{
char strFoundFileName[MAX_PATH];
strcpy(strFoundFileName, tempFind.GetFileName().GetBuffer(MAX_PATH));
if (tempFind.IsDirectory())
{
char strTempDir[MAX_PATH];
sprintf(strTempDir,"%s//%s", strDirName, strFoundFileName);
DeleteDirectory(strTempDir);
}
else
{
char strTempFileName[MAX_PATH];
sprintf(strTempFileName,"%s//%s", strDirName, strFoundFileName);
DeleteFile(sTempFileName);
}
}
}
tempFind.Close();
if(!RemoveDirectory(strDirName))
{
return FALSE;
}
return TRUE;
}
//////////////////////////////////////////////////////////////////////////////////////
相关文章推荐
- 利用C++如何覆盖或删除指定位置的文件内容
- C++实现:把一个文件夹里的冗余文件(.txt)删除
- 如何用VS2010新建一个类?用来写C++文件的标准格式建立?就是能做到声把声明放在.H里,实现放在.CPP里的
- 如何编程实现删除一个sap的在线用户
- 如何实现一个文件系统
- 如何打开一个文件夹并选中指定文件
- 在Asp.net中如何遍历一个本地目录下的所有文件并上载到Web 服务器上指定的目录中
- 一个使用多线程删除指定目录及子目录下所有指定文件的Java程序(源码)
- 如何实现一个文件系统(全文)
- 如何实现一个文件系统
- 如何简单实现可执行文件的自我删除
- 如何编程实现删除一个sap的在线用户
- C++实现文件删除
- 如何编程实现删除一个sap的在线用户
- 如何在客户端通过MSSQL执行某操作删除服务器的指定文件
- 如何在一个工程里面实现不同的功能打入不同的日志文件中【log4net】
- 如何在程序中实现关联指定的文件类型
- 如何在C#中用程序执行指定的SQL脚本文件,实现自动安装创建数据库
- 如何编程实现删除一个sap的在线用户
- 技术QA:如何实现自动删除用户配置文件? 推荐