在VB中使用API“SHFileOperation”删除文件的三个问题
2016-08-15 19:20
447 查看
使用API“SHFileOperation”来删除文件,一般的写法是:
Public Declare Function SHFileOperation Lib "shell32.dll" Alias "SHFileOperationA" (lpFileOp As SHFILEOPSTRUCT) As Long
Public Const FO_DELETE = &H3
Public Const FOF_ALLOWUNDO = &H40
'还有其他若干常数
Public 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
Public SHFileOp As SHFILEOPSTRUCT
一个问题是,即使设置了:SHFileOp.fFlags = FOF_ALLOWUNDO
也仍然会直接删除文件,而不是到回收站。貌似不起作用。
解决方法:(来自网络)
回复于: 2002-07-05 14:23:47
您的这个问题是因为您在SHFILEOPSTRUCT结构中的pFrom参数中
给出的是目标文件的相对位置,这样即使您使用FOF_ALLOWUNDO标记,
您的文件也将被直接删除。要解决这个问题,
只需要在pFrom中给出文件的完整路径。
另外一个问题是,跳出来的对话框(询问用户是否要删除文件),不是模态的。用户不必关闭对话框,就可以点击窗体。这样可能造成错误。(在windows文件夹里面,如果删除一个文件,跳出来的对话框是模态的,必须响应,否则不能回到刚才的文件夹。)
解决方法:
从这个API本身的功能和参数来看,好像找不到办法。那么采用变通的方法。暂时冻结VB应用程序的窗体,响应对话框之后再激活窗体。这样,与模态的效果相同。不过,窗体在恢复时会闪一下。
Me.Enabled = False
SHFileOperation SHFileOp
Me.Enabled = True
第三个问题是,如何知道用户对于对话框选择了“是”还是“否”呢?无法从这个API的返回值来判断。
解决方法:
对话框响应之后,SHFileOp.fAborted的值就表示用户的选择。如果选择了是、删除,那么fAborted = False。如果选择了否、不删除,那么就是True。
Public Declare Function SHFileOperation Lib "shell32.dll" Alias "SHFileOperationA" (lpFileOp As SHFILEOPSTRUCT) As Long
Public Const FO_DELETE = &H3
Public Const FOF_ALLOWUNDO = &H40
'还有其他若干常数
Public 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
Public SHFileOp As SHFILEOPSTRUCT
一个问题是,即使设置了:SHFileOp.fFlags = FOF_ALLOWUNDO
也仍然会直接删除文件,而不是到回收站。貌似不起作用。
解决方法:(来自网络)
回复于: 2002-07-05 14:23:47
您的这个问题是因为您在SHFILEOPSTRUCT结构中的pFrom参数中
给出的是目标文件的相对位置,这样即使您使用FOF_ALLOWUNDO标记,
您的文件也将被直接删除。要解决这个问题,
只需要在pFrom中给出文件的完整路径。
另外一个问题是,跳出来的对话框(询问用户是否要删除文件),不是模态的。用户不必关闭对话框,就可以点击窗体。这样可能造成错误。(在windows文件夹里面,如果删除一个文件,跳出来的对话框是模态的,必须响应,否则不能回到刚才的文件夹。)
解决方法:
从这个API本身的功能和参数来看,好像找不到办法。那么采用变通的方法。暂时冻结VB应用程序的窗体,响应对话框之后再激活窗体。这样,与模态的效果相同。不过,窗体在恢复时会闪一下。
Me.Enabled = False
SHFileOperation SHFileOp
Me.Enabled = True
第三个问题是,如何知道用户对于对话框选择了“是”还是“否”呢?无法从这个API的返回值来判断。
解决方法:
对话框响应之后,SHFileOp.fAborted的值就表示用户的选择。如果选择了是、删除,那么fAborted = False。如果选择了否、不删除,那么就是True。
相关文章推荐
- 用vb.net读取INI配置文件的方法,使用API
- 关于使用SHFileOperation做文件操作的问题
- VB使用API实现串口通讯的异常问题
- C#中使用API(SHFileOperation)进行文件操作,特别说明了回收站相关参数
- C#中使用API(SHFileOperation)进行文件操作,特别说明了回收站相关参数
- 关于VB.NET中使用JS文件问题
- 使用SHFileOperation删除文件夹报错的问题
- VB使用Kill删除文件时提示文件未找到
- 关于如何获得使用[迅播播放器]播放过的电影的问题,及如何删除播放过的文件的解答(一).
- c#中使用api(shfileoperation)进行文件操作,特别详解了回收站相关参数
- PB利用API-SHFileOperation 文件操作函数 实现多文件及文件夹的删除复制等操作
- 解决Win7文件正在使用无法删除的问题
- 使用jxl实现导出Excel,解决路径和删除文件的问题
- 关于使用FtpClient deleteFile 删除文件时删除不了问题解决
- Microsoft Office Outlook 2007的使用 出现的问题:如果Outlook.pst文件不小心给删除;
- swing中通过.class文件(把.java都删除)打包成jar文件,使用皮肤包遇到的问题。
- 解决Win7文件正在使用无法删除的问题
- 使用Hadoop API操作HDFS文件时遇到的问题及解决总结
- shfileoperation 提示无法删除文件的有关问题
- 使用inode号删除特殊文件及容易忽视的硬链接Links数目问题