说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

删除文件到回收站

编辑:说三道四文库 发布时间:2018-08-19 05:23
HTML文档下载 WORD文档下载 PDF文档下载

void __fastcall DeleteFileToRecycleBin (AnsiString FileName)
{
    //删除文件到回收站。
    SHFILEOPSTRUCT ShFileOp;
    char cFrom[MAX_PATH];


    strcpy(cFrom,FileName.c_str());
    cFrom[FileName.Length()]='\0';
    cFrom[FileName.Length()+1]='\0';

    ShFileOp.hwnd=Application->MainForm->Handle;
    ShFileOp.pFrom=cFrom; //改成"C:\\a.txt"也是一样的错。;
    ShFileOp.pTo=NULL;
    ShFileOp.wFunc=FO_DELETE;
    ShFileOp.fFlags=FOF_ALLOWUNDO ;
    SHFileOperation(&ShFileOp);<<-----这里报错。
}
//---------------------------------------------------------------------------

请问那位大侠能告诉我为何吗?
在Delphi中是这样的:
function DeleteFileWithUndo(sFileName : string ): boolean;//删除文件到垃圾箱;
var
fos : TSHFileOpStruct;
begin
FillChar( fos, SizeOf( fos ), 0 );  <<----这里在CB中应该怎么样???
with fos do
 begin
    wFunc := FO_DELETE;
    pFrom := PChar( sFileName );
    fFlags := FOF_ALLOWUNDO or FOF_NOCONFIRMATION or FOF_SILENT;
 end;
Result := ( 0 = ShFileOperation( fos ) );
end;



好像没什么问题啊!

FillChar( fos, SizeOf( fos ), 0 );  
相当于
memset(&fos, '\0', sizeof(fos));
把fos的区域清零。
我是这样调用的:

DeleteFileToRecycleBin("D:\\mY DOCUMENTS\\1.TXT");

真的,没什么问题!
有的,不信你拷贝我的代码在CB6里试试。
奇怪,我这里在两台机子上都是出现同样的错误。
靠!加一句话就行了!

    //删除文件到回收站。
    SHFILEOPSTRUCT ShFileOp;
    char cFrom[MAX_PATH];

    memset(&ShFileOp, '\0', sizeof(ShFileOp));<<---这句!气人!
    strcpy(cFrom,FileName.c_str());
    cFrom[FileName.Length()]='\0';
    cFrom[FileName.Length()+1]='\0';

    ShFileOp.hwnd=Application->MainForm->Handle;
    ShFileOp.pFrom=cFrom;
    ShFileOp.pTo=NULL;
    ShFileOp.wFunc=FO_DELETE;
    ShFileOp.fFlags=FOF_ALLOWUNDO|FOF_SIMPLEPROGRESS  ;
    SHFileOperation(&ShFileOp);
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘