zz999 发表于 2010-5-5 08:41:09

请教对指定目录里删除指定文件,但有子目录名不确定!

打个比方。我想删除C:\NEW目录下的指定文件1.txt2.txt
我想要的是时刻监控这个文件生成,只要生成就删除!

NEW目录下会生成 temp0   temp1temp2......目录

但是有可能 temp0   temp1 temp2....目录里可能还有子目录,

1.txt2.txt也有可能会生成在这些子目录里,只要发现就删除!

请教有可能实现不?为节省资源,子目录深度就监控2层就好了!





我的想法是,我监控c:\new   
因为temp0   temp1   不是同一时间生成的,之间有点间隔。
所以当发先TEMP0生成时便开始监控TEMP0目录下的动作。
一但发现1.TXT就删除,但是这个下面有可能有子目录,子目录名不确定,不知道如何解决!
1.txt2.txt只有一个,只要在这个目录里删除掉了便停止。

然后开始监控 TEMP1的生成,当TEMP1生成了就去监控TEMP1里的状态!



说的有点繁琐,如果能在列表里输出这些找到的1.txt2.txt的目录就最好了 !:)

水木子 发表于 2010-5-5 09:07:21

本帖最后由 水木子 于 2010-5-5 09:09 编辑

#include <GUIListView.au3>
Opt("TrayMenuMode", 1)

GUICreate("FileFindFirstFile", 400, 300)
$ListView1 = GUICtrlCreateListView('文件', 5, 5, 390, 230)
_GUICtrlListView_SetColumnWidth($ListView1, 0, 380)
$Input1 = GUICtrlCreateInput("", 5, 260, 340, 21)
$But1 = GUICtrlCreateButton("浏览", 350, 258, 40, 25)
GUISetState()

While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case - 3
                        Exit
                Case $But1
                        Browse()
        EndSwitch
WEnd

Func Browse()
        $Path = FileSelectFolder("查找", "C:Windows", "可执行文件(*.ini)")
        If Not @error Then
                GUICtrlSetData($Input1, $Path)
                Read($Path)
        EndIf
EndFunc   ;==>Browse

Func read($current)
        Local $search = FileFindFirstFile($current & "\*.*")
        While 1
                Dim $file = FileFindNextFile($search)
                If @error Or StringLen($file) < 1 Then ExitLoop

                If Not StringInStr(FileGetAttrib($current & "\" & $file), "D") And ($file <> "." Or $file <> "..") Then
                        _GUICtrlListView_AddItem($ListView1, $current & "\" & $file)
                EndIf

                If StringInStr(FileGetAttrib($current & "\" & $file), "D") And ($file <> "." Or $file <> "..") Then
                        read($current & "\" & $file)
                EndIf
        WEnd
        Return
EndFunc   ;==>read

zz999 发表于 2010-5-5 09:29:06

先谢谢木子哥
我将 Local $search = FileFindFirstFile($current & "\*.*")
改成了 Local $search = FileFindFirstFile($current & "\1.txt")
他就只搜索跟目录!

另外如果我第二个文件是123.exe 呢
又改如何解决?

水木子 发表于 2010-5-5 09:43:09

我那例子是将指定目录下的所有文件全部列出来(不管多少层)
既然是全都,那就好办啦!判断搜索到的文件名就可以了,找到了就删除!

zz999 发表于 2010-5-5 10:04:07

我看到效果了
但是我把文件名一改   他只搜索了第一层!

3mile 发表于 2010-5-5 10:23:09

只是监控某目录的长度变化--笨办法。
HotKeySet("{ESC}", "quit");定义退出热键
$size = DirGetSize("new");确定原始文件夹的大小

AdlibRegister("MyAdlib",1000)

While 1
        Sleep(1000)
WEnd

Func MyAdlib()
        $fsize=DirGetSize("new")
        If $fsize<>$size Then
                MsgBox(0,0,"文件发生改变")
                ;这里跟水木兄查找文件函数
                $size=$fsize
        EndIf
EndFunc

Func quit();退出
        AdlibUnRegister("MyAdlib")
        Exit
EndFunc
页: [1]
查看完整版本: 请教对指定目录里删除指定文件,但有子目录名不确定!