shfileoperation 请教调用 SHFileOperation 进行文件复制重命名的问题
各位老铁们好,相信很多人对shfileoperation都不是特别的了解,因此呢,今天就来为大家分享下关于shfileoperation以及请教调用 SHFileOperation 进行文件复制重命名的问题的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!
请教调用 SHFileOperation 进行文件复制重命名的问题
#include<shellapi.h>
//删除文件或者文件夹
bool DeleteFile(TCHAR* lpszPath)
{
SHFILEOPSTRUCT FileOp={0};
FileOp.fFlags= FOF_ALLOWUNDO|//允许放回回收站
FOF_NOCONFIRMATION;//不出现确认对话框
FileOp.pFrom= lpszPath;
FileOp.pTo= NULL;//一定要是NULL
FileOp.wFunc= FO_DELETE;//删除操作
return SHFileOperation(&FileOp)== 0;
}
//复制文件或文件夹
bool CopyFile(TCHAR*pTo,TCHAR*pFrom)
{
SHFILEOPSTRUCT FileOp={0};
FileOp.fFlags= FOF_NOCONFIRMATION|//不出现确认对话框
FOF_NOCONFIRMMKDIR//需要时直接创建一个文件夹,不需用户确定
|FOF_SIMPLEPROGRESS;//进度条
FileOp.pFrom= pFrom;
FileOp.pTo= pTo;
FileOp.wFunc= FO_COPY;
return SHFileOperation(&FileOp)== 0;
}
//移动文件或文件夹
bool MoveFile(TCHAR*pTo,TCHAR*pFrom)
{
SHFILEOPSTRUCT FileOp={0};
FileOp.fFlags= FOF_NOCONFIRMATION|//不出现确认对话框
FOF_NOCONFIRMMKDIR;//需要时直接创建一个文件夹,不需用户确定
FileOp.pFrom= pFrom;
FileOp.pTo= pTo;
FileOp.wFunc= FO_MOVE;
return SHFileOperation(&FileOp)== 0;
}
//从命名文件或文件夹
bool ReNameFile(TCHAR*pTo,TCHAR*pFrom)
{
SHFILEOPSTRUCT FileOp={0};
FileOp.fFlags= FOF_NOCONFIRMATION;
FileOp.pFrom= pFrom;
FileOp.pTo= pTo;
FileOp.wFunc= FO_RENAME;
FileOp.hwnd= HWND_DESKTOP;
return SHFileOperation(&FileOp)==0;
}
void CShfileopDlg::OnButton1()
{
// TODO: Add your control notification handler code here
CopyFile(_T("c:\\two"),_T("c:\\123"));
ReNameFile(_T("c:\\newtwo"),_T("c:\\123"));
DeleteFile(_T("c:\\newtwo"));
AfxMessageBox(_T("完成"));
}
vb中关于filelistbox控件的问题
这个问题可以这样的解决:在vb6中调试通过。
1:首先在公共模块中:
Option Explicit
Public Const FO_MOVE=&H1
Public Const FO_COPY=&H2
Public Const FO_DELETE=&H3
Public Const FO_RENAME=&H4
Public Const FOF_NOCONFIRMATION=&H10
Public Const FOF_NOCONFIRMMKDIR=&H200
Public Const FOF_ALLOWUNDO=&H40
Type SHFILEOPSTRUCT
hWnd As Long
wFunc As Long
pFrom As String
pTo As String
fFlags As Integer
fAborted As Boolean
hNameMaps As Long
sProgress As String
End Type
Declare Function SHFileOperation Lib"shell32.dll" Alias"SHFileOperationA"(lpFileOp As SHFILEOPSTRUCT) As Long
其次:在frm模块之中:
Private Sub Command1_Click()
Dim SHFileOp As SHFILEOPSTRUCT
SHFileOp.wFunc= FO_COPY
SHFileOp.fAborted= True
SHFileOp.pFrom="F:\MEM\*.*"
SHFileOp.pTo="f:\aa"
SHFileOp.fFlags= FOF_ALLOWUNDO+ FOF_NOCONFIRMATION
SHFileOperation SHFileOp
MsgBox"复制完成"
End Sub
注意:这是后台的一个拷贝,复制的过程当中软件还能操作,但是你要理解vb
的api函数的一些声明和用法,特别是SHFileOperation的用法。
2:FILELISTBOX控件显示文件的时候如何实现双击时删除选定的文件的解决:
在frm之中:一个listbox控件
Option Explicit
Private Const LB_ITEMFROMPOINT=&H1A9
Private Declare Function SendMessage Lib"user32"
Alias"SendMessageA"(ByVal hwnd As Long, ByVal wMsg As Long, ByVal
wParam As Long, lParam As Any) As Long
Private Sub List1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim pos As Long
dim idx As Long
pos= X/ Screen.TwipsPerPixelX+ Y/ Screen.TwipsPerPixelY* 65536
idx= SendMessage(List1.hwnd, LB_ITEMFROMPOINT, 0, ByVal pos)
Kill List1.List(idx)
List1.Refresh
End Sub
注意:Kill List1.List(idx)‘这个地方有可能不会达到你的要求,如果要删
除文件,则你要写全文件的路径,即是:
kill"c:\aaa\"& List1.List(idx)
如果是只是不显示在list中,则只需:List1.RemoveItem(idx)就可以了!
你可以试一试!!!
文章到此结束,如果本次分享的shfileoperation和请教调用 SHFileOperation 进行文件复制重命名的问题的问题解决了您的问题,那么我们由衷的感到高兴!