生活随笔
收集整理的這篇文章主要介紹了
VC批量拷贝,移动,删除文件---SHFileOperation
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
SHFileOperation????????函數(shù)功能描述:文件操作,與?Shell?的動(dòng)作相同.???函數(shù)原型:???#include<shellapi.h>????WINSHELLAPI?int?WINAPI?SHFileOperation(LPSHFILEOPSTRUCT?lpFileOp);????????參數(shù):????typedef?struct?_SHFILEOPSTRUCT????{????????????HWND????????????hwnd;???//父窗口句柄????????????UINT????????????wFunc;?//要執(zhí)行的動(dòng)作????????????LPCTSTR?????????pFrom;?//源文件路徑,可以是多個(gè)文件????????????LPCTSTR?????????pTo;????//目標(biāo)路徑,可以是路徑或文件名????????????FILEOP_FLAGS????fFlags;?//標(biāo)志,附加選項(xiàng)????????????BOOL????????????fAnyOperationsAborted;?//是否可被中斷????????????LPVOID??????????hNameMappings;?????????//文件映射名字,可在其它?Shell?函數(shù)中使用????????????LPCTSTR?????????lpszProgressTitle;?//?只在?FOF_SIMPLEPROGRESS?時(shí),指定對(duì)話框的標(biāo)題。????}?SHFILEOPSTRUCT,?FAR?*LPSHFILEOPSTRUCT;??
wFunc?可以為:????/FO_MOVE??????????0x0001?移動(dòng)文件????FO_COPY???????????0x0002?復(fù)制文件????FO_DELETE?????????0x0003?刪除文件,只使用?pFrom????FO_RENAME?????????0x0004?文件重命名????????fFlags可以為:????FOF_MULTIDESTFILES?????????0x0001?//pTo?指定了多個(gè)目標(biāo)文件,而不是單個(gè)目錄????FOF_CONFIRMMOUSE???????????0x0002? //Not used.
??FOF_SILENT?????????????????0x00044?//?不顯示一個(gè)進(jìn)度對(duì)話框????FOF_RENAMEONCOLLISION??????0x0008?//?碰到有抵觸的名字時(shí),自動(dòng)分配前綴????FOF_NOCONFIRMATION?????????0x0010?//?不對(duì)用戶顯示提示????FOF_WANTMAPPINGHANDLE??????0x0020?//?填充?hNameMappings?字段,必須使用?SHFreeNameMappings?釋放????FOF_ALLOWUNDO??????????????0x0040?//?允許撤銷????FOF_FILESONLY??????????????0x0080?//?執(zhí)行通配符,使用?*.*?時(shí),?只對(duì)文件操作????FOF_SIMPLEPROGRESS?????????0x0100?//?簡(jiǎn)單進(jìn)度條,意味者不顯示文件名。????FOF_NOCONFIRMMKDIR?????????0x0200?//?建新目錄時(shí)不需要用戶確定????FOF_NOERRORUI??????????????0x0400?//?不顯示出錯(cuò)用戶界面????FOF_NOCOPYSECURITYATTRIBS?0x0800?//?不復(fù)制?NT?文件的安全屬性????FOF_NORECURSION????????????0x1000?//?不遞歸目錄????????返回值:????函數(shù)成功返回?0?,失敗返回非?0?。??????? 注意:
1.pFrom和pTo最好以\0\0結(jié)尾(把存放路徑的字符串初始化為0),不然有可能會(huì)出錯(cuò)2.SHFileOperation能操作網(wǎng)絡(luò)上的文件?如果你想將本地文件復(fù)制到192.168.1.99?那么只要在192.168.1.99上共享123目錄?然后將pTo設(shè)置為\\192.168.1.99\123?就可以了?但不要設(shè)置為\\192.168.1.99
??例子:????1.?將?C:\Test.txt?拷貝到?D:\???????????SHFILEOPSTRUCT?lpsh;???????ZeroMemory(&lpsh,sizeof(lpsh));???????lpsh.hwnd=?HWND_DESKTOP;???????lpsh.fFlags=FOF_NOCONFIRMATION|FOF_SIMPLEPROGRESS?;???????lpsh.wFunc=FO_COPY;?//?FO_MOVE?則是移動(dòng)???????lpsh.pFrom=?"C:\Test.txt";?????????lpsh.pTo?=?"D:\"???????if(?0?!=?SHFileOperation(&lpsh))???????{??????????AfxMessageBox("復(fù)制文件出錯(cuò),請(qǐng)檢查");??????????return?;???????}????????2.?刪除?D:\Test.txt???????SHFILEOPSTRUCT?lpsh;???????ZeroMemory(&lpsh,sizeof(lpsh));???????lpsh.hwnd=?HWND_DESKTOP;???????lpsh.fFlags=FOF_NOCONFIRMATION|FOF_SIMPLEPROGRESS?;???????lpsh.wFunc=FO_DELETE;???????lpsh.pFrom=?"D:\Test.txt";?????????if(?0?!=?SHFileOperation(&lpsh))???????{??????????AfxMessageBox("刪除文件出錯(cuò),請(qǐng)檢查");??????????return?;???????}????????3.重命名???????SHFILEOPSTRUCT?lpsh;???????ZeroMemory(&lpsh,sizeof(lpsh));???????lpsh.hwnd=?HWND_DESKTOP;???????lpsh.fFlags=FOF_NOCONFIRMATION|FOF_SIMPLEPROGRESS?;???????lpsh.wFunc=FO_RENAME;???????lpsh.pFrom=?"D:\Test.txt";?????????lpsh.pTo?=?"D:\Test2.txt";???????if(?0?!=?SHFileOperation(&lpsh))???????{??????????AfxMessageBox("重命名文件出錯(cuò)!");??????????return?;???????}????????????
??SHFILEOPSTRUCT?Op;????ZeroMemory(&Op,?sizeof(Op));????????TCHAR?ToBuf[MAX_PATH];????TCHAR?FromBuf[MAX_PATH];????ZeroMemory(ToBuf,?sizeof(ToBuf));????ZeroMemory(FromBuf,?sizeof(FromBuf));????lstrcpy(FromBuf,?strDeleteFile);????????Op.hwnd?=?NULL;????Op.pFrom?=?FromBuf;????Op.pTo?=?ToBuf;????Op.fFlags?=?FOF_NOCONFIRMATION?|?FOF_NOCONFIRMMKDIR?|?FOF_NOERRORUI;????Op.fAnyOperationsAborted?=?FALSE;????Op.hNameMappings?=?NULL;????Op.lpszProgressTitle?=?NULL;????Op.wFunc?=?FO_DELETE;????????SHFileOperation(&Op);?
總結(jié)
以上是生活随笔為你收集整理的VC批量拷贝,移动,删除文件---SHFileOperation的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。