您的位置:首页 > 编程语言 > C语言/C++

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;

}



//////////////////////////////////////////////////////////////////////////////////////
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: