这段删除文件的代码是不是有问题?

jixiaoqiang 2004-12-24 09:12:07
我的程序需要判断一个目录是否存在,如果存在,需要删除该目录及其下面的文件,然后新建该目录,然后再往里面写文件。
使用了以下的代码,结果使用中发现很不稳定:
AnsiString tmpPath=ExtractFilePath(Application->ExeName) + "\\新建文件夹";
if(!Sysutils::DirectoryExists(tmpPath))
{
CreateDir(tmpPath);
Sleep(500);
}
else
{
//SHFILEOpStruct
AnsiString DelFile=tmpPath;
TSHFileOpStruct OpStruct;
//StrPCopy(DelFile,File_Name);
OpStruct.hwnd=Handle;
OpStruct.wFunc=FO_DELETE;
OpStruct.pFrom=DelFile.c_str();
OpStruct.pTo=NULL;
OpStruct.fFlags=FOF_NOCONFIRMATION;
OpStruct.hNameMappings=NULL;
OpStruct.lpszProgressTitle=NULL;
SHFileOperation(&OpStruct);
Sleep(1000);
//得创建目录
CreateDir(tmpPath);
}

有时候老提示:无法删除文件:无法读取文件或磁盘
但有时候能够删掉,请问是怎么回事?
我试了好多次,好像路径中包含英文时容易出现这问题,英文路径几乎没有出现过
...全文
91 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
jishiping 2004-12-24
  • 打赏
  • 举报
回复
lihongxing2002(潇洒) 说的也是其中的一个错误,但是 SHFileOperation 中的错误,很多人都不知道。其实楼主下面的代码,没有必要连文件夹一起删除,只要删除文件夹下面的文件就可以了。就是

AnsiString tmpPath=ExtractFilePath(Application->ExeName) + "新建文件夹";
if(!Sysutils::DirectoryExists(tmpPath))
{
CreateDir(tmpPath);
Sleep(500);
}
else
{
tmpPath += "\\*.*";
tmpPath += '\0'; //这样只删除目录下的所有文件

TSHFileOpStruct OpStruct;
OpStruct.hwnd=Handle;
OpStruct.wFunc=FO_DELETE;
OpStruct.pFrom=tmpPath.c_str();
OpStruct.pTo=NULL;
OpStruct.fFlags=FOF_NOCONFIRMATION;
OpStruct.hNameMappings=NULL;
OpStruct.lpszProgressTitle=NULL;
SHFileOperation(&OpStruct);
Sleep(1000);
}
jishiping 2004-12-24
  • 打赏
  • 举报
回复
首先,楼主这样做有什么意义呢?删除一个目录,马上又建立这个目录,这不是无聊么?或者叫多此一举。
其次,楼主的代码是有问题的。问题的关键在于,很多人不会使用SHFileOperation这个函数。要知道,这个函数的参数指定的pFrom,可以是多个文件(目录),多个文件之间用0字符隔开,结束必须用2个0字符,而不是C语言中的一个0字符。所以还必须在DelFile后面加上一个0字符才可以。就是
AnsiString DelFile = tmpPath + '\0'; //是'\0',而不是"\0",使用"\0"是没有任何效果的
lihongxing2002 2004-12-24
  • 打赏
  • 举报
回复
AnsiString tmpPath=ExtractFilePath(Application->ExeName) + "新建文件夹";
改成这样就行了
h98458 2004-12-24
  • 打赏
  • 举报
回复
可能是你要删除的那个文件正在使用中

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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