以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  删除文件目录问题(问题已解决)  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=7941)

--  作者:migold
--  发布时间:2010/8/21 16:48:00
--  删除文件目录问题(问题已解决)

如题。

我写了代码

        If FileSys.DirectoryExists("D:\\Temp") Then \'要删除文件目录
            Try
                FileSys.DeleteDirectory("D:\\Temp",2,2)
            Catch ex As Exception
            End Try
        End If

如果,D:\\Temp目录下的文件或下级目录中有文件在使用中,就不能删除。

目的主要是:删除D:\\Temp目录下未在使用的文件或下级目录,如果出现有使用的文件就忽略,请教高手代码

[此贴子已经被作者于2010-8-22 15:44:38编辑过]

--  作者:mr725
--  发布时间:2010/8/21 17:29:00
--  
这个只能关闭正在使用的文件后, 才能删除这个目录吧.   另外即使可以, 也太危险了吧,因为打开的文件至少现在还是有用的,强制删除你会后悔的啊~  
--  作者:migold
--  发布时间:2010/8/21 17:36:00
--  

我只是要删除Temp目录下的未打开文件,已打开的文件不用删除,

我只是要删除Temp目录下的未使用目录,已使用的目录不用删除


--  作者:mr725
--  发布时间:2010/8/21 21:59:00
--  
应请教系统专家啦~  好像win都不能这样的,俺不行, 帮你顶~ 
--  作者:czy
--  发布时间:2010/8/21 22:44:00
--  
以下是引用migold在2010-8-21 17:36:00的发言:

我只是要删除Temp目录下的未打开文件,已打开的文件不用删除,

我只是要删除Temp目录下的未使用目录,已使用的目录不用删除

 

应该可以的,不过写这样的代码有些麻烦。


--  作者:migold
--  发布时间:2010/8/22 15:44:00
--  
谢谢
--  作者:czy
--  发布时间:2010/8/22 18:24:00
--  

这样就算解决了?

你不是要求已经打开的文件不删除吗?

 


--  作者:migold
--  发布时间:2010/8/23 11:02:00
--  

我是根据6楼楼主的代码提示,再写出代码。


--  作者:狐狸爸爸
--  发布时间:2010/8/23 11:04:00
--  
6楼代码是不行的,可能会漏删除文件。
[此贴子已经被作者于2010-8-23 11:04:42编辑过]

--  作者:migold
--  发布时间:2010/8/23 11:07:00
--  

Dim mFile1,mFile2,mFile3,mMes1 As String
Dim mi6,mi7,mi8 As Integer
mFile1 = "C:\\Temp"
mFile2 = "D:\\Temp"
mFile3 = "E:\\Temp"
mMes1 = "删除临时目录"
            Dim mdeldirs,mdeldirs1,mdeldirs2,mdeldirs3 As New List(Of String)
            If mFile1 IsNot Nothing Andalso mFile1 <> "" Then
                mdeldirs.Add(mFile1)
            End If
            If mFile2 IsNot Nothing Andalso mFile2 <> "" Then
                mdeldirs.Add(mFile2)
            End If
            If mFile3 IsNot Nothing Andalso mFile3 <> "" Then
                mdeldirs.Add(mFile3)
            End If
            mi6 = 0
            For mdels As Integer = 0 To mdeldirs.Count - 1
                If FileSys.DirectoryExists(mdeldirs(mdels)) Then \'判断删除目录存在
                    mdeldirs1.Clear()
                    mdeldirs1.Add(mdeldirs(mdels))
                    For Each mdelFile2 As String In FileSys.GetFiles(mdeldirs(mdels))
                        Try
                            FileSys.DeleteFile(mdelFile2,2,2) \'则彻底删除文件
                        Catch ex As Exception
                            mi6 = mi6 + 1
                        End Try
                    Next
                    Do
                        mdeldirs2.Clear()
                        For mdels1 As Integer = 0 To mdeldirs1.Count - 1
                            For Each mdeldir As String In FileSys.GetDirectories(mdeldirs1(mdels1))
                                mdeldirs2.Add(mdeldir)
                                mdeldirs3.Add(mdeldir)
                                For Each mdelFile As String In FileSys.GetFiles(mdeldir)
                                    Try
                                        FileSys.DeleteFile(mdelFile,2,2) \'则彻底删除文件
                                    Catch ex As Exception
                                        mi6 = mi6 + 1
                                    End Try
                                Next
                            Next
                        Next
                        mdeldirs1.Clear()
                        For mdels2 As Integer = 0 To mdeldirs2.Count - 1
                            mdeldirs1.Add(mdeldirs2(mdels2))
                        Next
                    Loop While mdeldirs1.Count > 0
                End If
            Next
            mi8 = 0
            For mdels3 As Integer = 0 To mdeldirs3.Count - 1
                mi7 = 0
                For Each mdeldir1 As String In FileSys.GetDirectories(mdeldirs3(mdeldirs3.Count-1-mdels3))
                    mi7 = 1
                Next
                For Each mdelFile1 As String In FileSys.GetFiles(mdeldirs3(mdeldirs3.Count-1-mdels3))
                    mi7 = 1
                Next
                mi8 = mi8 + mi7
                If mi7 = 0 Then
                    Try
                        FileSys.DeleteDirectory((mdeldirs3(mdeldirs3.Count-1-mdels3)),2,2)
                    Catch ex As Exception
                    End Try
                End If
            Next
            If mi6 > 0 Orelse mi8 > 0 Then
                MessageBox.Show(mi6 & "个文件未删除" & vbCrlf & mi8 & "个文件夹未删除" & vbCrlf,mMes1)
            Else
                MessageBox.Show("全都删除完成",mMes1)
            End If

这个代码,是我按照6楼提示写的,请指教