急!!!关于Dir函数的问题

windyloft 2005-09-22 02:37:50
已知存在目录"c:\test\11"
Private Sub Command1_Click()

If Dir("c:\test\11", vbDirectory) <> "" Then
RmDir "c:\test"
End If

End Sub

这段代码在win98上没有问题可以正确执行,最后c:\test被删除掉
而换到winxp上就出现错误,提示路径不正确
大家看看怎么解决这个问题?
...全文
211 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
windyloft 2005-09-29
  • 打赏
  • 举报
回复
我估计是Dir保持着对目录的引用吧,在RmDir "c:\test"前再加个Dir "c:"换个目录就好了......
总之,神奇啊~~

---------------------
这个方法好用

可是不知道为什么会这样?是bug吗?
of123 2005-09-29
  • 打赏
  • 举报
回复
XP 比 98 实时性更强。当你删除目录时,Dir 还没有完成磁盘文件的释放。

试试:
1 删除前加一点延时。

2 干脆不用 Dir:

On Error Resume Next
RmDir "c:\test"
kmzs 2005-09-28
  • 打赏
  • 举报
回复
可能是大小写问题
northwolves 2005-09-28
  • 打赏
  • 举报
回复
Dir的确保持着对目录的引用,你可应用FSO 进行目录的操作

Private Sub Command1_Click()
On Error Resume Next
MkDir "c:\test"
MkDir "c:\test\11"
MsgBox "ok"
End Sub

Private Sub Command2_Click()
Dim fso As New FileSystemObject, f As Folder
Set f = fso.GetFolder("c:\test\11")
If Not IsNull(f) Then
Set f = f.ParentFolder
f.Delete
End If
End Sub
daisy8675 2005-09-28
  • 打赏
  • 举报
回复
先mark,晚上在回复
supergreenbean 2005-09-22
  • 打赏
  • 举报
回复
我估计是Dir保持着对目录的引用吧,在RmDir "c:\test"前再加个Dir "c:"换个目录就好了......
总之,神奇啊~~
conrad_wan 2005-09-22
  • 打赏
  • 举报
回复
Private Sub Command1_Click()

If Dir("c:\test\ll", vbDirectory) <> "" Then
RmDir "c:\test\ll"
End If
If Dir("c:\test", vbDirectory) <> "" Then
RmDir "c:\test"
End If

End Sub
windyloft 2005-09-22
  • 打赏
  • 举报
回复
If Dir("c:\test\11", vbDirectory) <> "" Then
RmDir "c:\test\11"
RmDir "c:\test" 'error
End If
我的问题不在于RmDir 是否耗用,而是Dir的问题。
当我使用Dir查找一个目录下的子目录或者文件后,我就无法删除这个目录。
这个问题在98下就没有,而xp下就有。/
windyloft 2005-09-22
  • 打赏
  • 举报
回复
这和rmdir没有关系,
只要我使用了Dir,并且这个程序没有退出,我就是用手动删除也不行
而在98中就没有这个问题
viena 2005-09-22
  • 打赏
  • 举报
回复
Option Explicit
Private Type SHFILEOPSTRUCT
hwnd As Long
wFunc As Long
pFrom As String
pTo As String
fFlags As Integer
fAnyOperationsAborted As Long
hNameMappings As Long
lpszProgressTitle As String '只有在 FOF_SIMPLEPROGRESS 时用
End Type

Private Declare Function SHFileOperation Lib _
"shell32.dll" Alias "SHFileOperationA" (lpFileOp _
As SHFILEOPSTRUCT) As Long

'wFunc 常数
'FO_COPY 把 pFrom 文件拷贝到 pTo。
Const FO_COPY = &H2
'FO_DELETE 删除 pFrom 中的文件(pTo 忽略)。
Const FO_DELETE = &H3
'FO_MOVE 把 pFrom 文件移动到 pTo。
Const FO_MOVE = &H1

'fFlag 常数
'FOF_ALLOWUNDO 允许 Undo 。
Const FOF_ALLOWUNDO = &H40
'FOF_NOCONFIRMATION 不显示系统确认对话框。
Const FOF_NOCONFIRMATION = &H10
'FOF_NOCONFIRMMKDIR 不提示是否新建目录。
Const FOF_NOCONFIRMMKDIR = &H200
'FOF_SILENT 不显示进度对话框
Const FOF_SILENT = &H4

Private Sub Command2_Click()
' 删除文件夹
If Dir("c:\test\11", vbDirectory) <> "" Then
Dim SHFileOp As SHFILEOPSTRUCT
SHFileOp.wFunc = FO_DELETE
SHFileOp.pFrom = "c:\test"
SHFileOp.fFlags = FOF_ALLOWUNDO + FOF_NOCONFIRMATION
Call SHFileOperation(SHFileOp)
End If
End Sub
benyfeifei 2005-09-22
  • 打赏
  • 举报
回复
摘自MSDN:
RmDir path

必要的 path 参数是一个字符串表达式,用来指定要删除的目录或文件夹。path 可以包含驱动器。如果没有指定驱动器,则 RmDir 会在当前驱动器上删除目录或文件夹。

说明

如果想要使用 RmDir 来删除一个含有文件的目录或文件夹,则会发生错误。在试图删除目录或文件夹之前,先使用 Kill 语句来删除所有文件。
kingnew 2005-09-22
  • 打赏
  • 举报
回复
是不是NTFS没有权限不够
supergreenbean 2005-09-22
  • 打赏
  • 举报
回复
无法用rm删除非空目录的吧

7,763

社区成员

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

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