讨论:比如说一个文件夹里有几千个文件[不含有子文件夹],每个文件大小不超过1M。如何实行快速删除呢?删除的功效要类似shite+delete组合

hsly110 2005-04-05 03:55:01
讨论:比如说一个文件夹里有几千个文件[不含有子文件夹],每个文件大小不超过1M。如何实行快速删除呢?删除的功效要类似shite+delete组合键
...全文
532 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
dzq138 2005-04-06
  • 打赏
  • 举报
回复
..
ShiGang 2005-04-06
  • 打赏
  • 举报
回复
SHFileOperation用這個吧,Copy,Delete,Move都快捷簡單方便.
chenjunge 2005-04-06
  • 打赏
  • 举报
回复
ntsetinformationfile
hsly110 2005-04-06
  • 打赏
  • 举报
回复
来来,又有个新问题了。
如果 用SHFileOperation 删除了文件,但是如果防止别人用数据恢复工具来删除的文件呢 ?

SHFileOperation 的删除功效,可以达到防止数据恢复了吗?

如果不行,那如何进行真正的永久性删除呢?
大家讨论一下, 想要个思路。

我会按时结贴的
星辰游侠 2005-04-05
  • 打赏
  • 举报
回复
gz
hsly110 2005-04-05
  • 打赏
  • 举报
回复
呵呵,的确是 FOF_ALLOWUNDO 的原因。
刚刚测试过 SHFileOperation() 函数, 删除 180MB的文件,其中有111个子文件夹,平均每个文件大约800KB,用了3秒钟,速度还可以。

jackwuwei 2005-04-05
  • 打赏
  • 举报
回复
将FOF_ALLOWUNDO 设为FALSE,则不会放到回收站
hsly110 2005-04-05
  • 打赏
  • 举报
回复
但是我在 WIN2003 测试,SHFileOperation()函数,只是放进回收站而以,没有达到 shift+delete 组合键的效果呢。
其他WIN系统,我还没有测试
Practise_Think 2005-04-05
  • 打赏
  • 举报
回复
用SHFileOperation()函数吧,这个比逐个逐个文件删除省事多了
swordning 2005-04-05
  • 打赏
  • 举报
回复

//Delete C:\\11

SHFILEOPSTRUCT op={0};
op.wFunc=FO_DELETE;
op.pFrom="c:\\11";
op.fFlags=FOF_SILENT|FOF_NOCONFIRMATION;
SHFileOperation(&op);
kugou123 2005-04-05
  • 打赏
  • 举报
回复
【问题】怎样删除一个非空目录,及其目录里面所有内容:
【解答1】如果不进行递归删除。你可以使用API函数SHFileOperation,它可以一次删除目录及其下面的子目录和文件。
示例代码:
BOOL DelTree(LPCTSTR lpszPath)
{
SHFILEOPSTRUCT FileOp;
FileOp.fFlags = FOF_NOCONFIRMATION;
FileOp.hNameMappings = NULL;
FileOp.hwnd = NULL;
FileOp.lpszProgressTitle = NULL;
FileOp.pFrom = lpszPath;
FileOp.pTo = NULL;
FileOp.wFunc = FO_DELETE;
return SHFileOperation(&FileOp) == 0;
}

【解答2】使用递归调用,逐个删除:
示例代码:

BOOL DeleteDirectory(char *DirName)//如删除 DeleteDirectory("c:\\aaa")
{
CFileFind tempFind;
char tempFileFind[MAX_PATH];
sprintf(tempFileFind,"%s\\*.*",DirName);
BOOL IsFinded=(BOOL)tempFind.FindFile(tempFileFind);
while(IsFinded)
{
IsFinded=(BOOL)tempFind.FindNextFile();
if(!tempFind.IsDots())
{
char foundFileName[MAX_PATH];
strcpy(foundFileName,tempFind.GetFileName().GetBuffer(MAX_PATH));
if(tempFind.IsDirectory())
{
char tempDir[MAX_PATH];
sprintf(tempDir,"%s\\%s",DirName,foundFileName);
DeleteDirectory(tempDir);
}
else
{
char tempFileName[MAX_PATH];
sprintf(tempFileName,"%s\\%s",DirName,foundFileName);
DeleteFile(tempFileName);
}
}
}
tempFind.Close();
if(!RemoveDirectory(DirName))
{
MessageBox(0,"删除目录失败!","警告信息",MB_OK);//比如没有找到文件夹,删除失败,可把此句删除
return FALSE;
}
return TRUE;
}
wuyapu 2005-04-05
  • 打赏
  • 举报
回复
使用SHFileOperation效果就和资源管理器的速度一样,因为它也用这个函数
oyljerry 2005-04-05
  • 打赏
  • 举报
回复
SHFileOperation删除文件
signoft 2005-04-05
  • 打赏
  • 举报
回复
1、写批处理文件 新建delete.bat
内容:
rd /s/q (绝对路径)\MyDir

在程序中直接用ShellExecute(...)执行这个批处理文件

2、用程序删除
BOOL CCutfoldDlg::DelDirectory(CString DirName)
{
CFileFind tempFind;
char tempFileFind[200];
sprintf(tempFileFind,"%s\\*.*",DirName);
BOOL IsFinded=(BOOL)tempFind.FindFile(tempFileFind);
while(IsFinded)
{
IsFinded=(BOOL)tempFind.FindNextFile();
if(!tempFind.IsDots())
{
char foundFileName[200];
strcpy(foundFileName,tempFind.GetFileName().GetBuffer(200));
if(tempFind.IsDirectory())
{
char tempDir[200];
sprintf(tempDir,"%s\\%s",DirName,foundFileName);
DelDirectory(tempDir);
}
else
{
char tempFileName[200];
sprintf(tempFileName,"%s\\%s",DirName,foundFileName);
DeleteFile(tempFileName);
}
}
}
tempFind.Close();
if(!RemoveDirectory(DirName))
{
::MessageBox(0,"删除目录失败!","警告信息",MB_OK);
return FALSE;
}
return TRUE;
}
Kudeet 2005-04-05
  • 打赏
  • 举报
回复
http://blog.csdn.net/laiyiling/archive/2005/01/05/240233.aspx
老夏Max 2005-04-05
  • 打赏
  • 举报
回复
同意2楼使用多线程,参考:
一个用多线程实现文件查找的例子
http://www.vckbase.com/document/viewdoc/?id=449
柯本 2005-04-05
  • 打赏
  • 举报
回复
如果是w2k以上,可考虑用调用CMD命令
rd /s /q temp
fpig 2005-04-05
  • 打赏
  • 举报
回复
多线程?或者直接进行磁盘操作
hsly110 2005-04-05
  • 打赏
  • 举报
回复
我自己先顶一下

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧