找回密码
 加入
搜索
查看: 7373|回复: 18

[效率算法] 怎么将文件列表按照日期排列【已解决】

 火.. [复制链接]
发表于 2011-12-15 21:34:02 | 显示全部楼层 |阅读模式
本帖最后由 q113960096 于 2011-12-22 09:24 编辑

先将文件读取到数组,然后将文件列表按照日期排列,得到最近的文件名称,谢谢。
发表于 2011-12-15 22:25:35 | 显示全部楼层
要么用命令行dir,要么是au3的FileGetTime+_FileListtoArray
 楼主| 发表于 2011-12-16 10:17:05 | 显示全部楼层
回复 2# tsui

这我也想到了,就不知道具体怎么操作。
发表于 2011-12-16 12:49:44 | 显示全部楼层
能否举个例子最好
 楼主| 发表于 2011-12-16 13:02:05 | 显示全部楼层
回复 4# zxxputian1

对啊,dir 这个就不用了。au3 的可以举
发表于 2011-12-17 11:51:17 | 显示全部楼层
改造下_FileListToArray函数,未作测试。
#Include <Array.au3>
$p=__FileListToArray("E:\UNZIPPED\IconImage" ,"*",1,1)
_ArrayDisplay($p)


Func __FileListToArray($sPath, $sFilter = "*", $iFlag = 0,$sort=1);前3个参数同_FileListToArray,$sort=1,升序;$sort=0,降序
        Local $hSearch, $sFile, $sFileList, $sDelim = "|"
        Local $path[1][2]
        $sPath = StringRegExpReplace($sPath, "[\\/]+\z", "") & "\" ; ensure single trailing backslash
        If Not FileExists($sPath) Then Return SetError(1, 1, "")
        If StringRegExp($sFilter, "[\\/:><\|]|(?s)\A\s*\z") Then Return SetError(2, 2, "")
        If Not ($iFlag = 0 Or $iFlag = 1 Or $iFlag = 2) Then Return SetError(3, 3, "")
        $hSearch = FileFindFirstFile($sPath & $sFilter)
        If @error Then Return SetError(4, 4, "")
        While 1
                $sFile = FileFindNextFile($hSearch)
                If @error Then ExitLoop
                If ($iFlag + @extended = 2) Then ContinueLoop
                ReDim $path[UBound($path)+1][2]
                $path[UBound($path)-1][0]=$sPath&$sFile
                $path[UBound($path)-1][1]=FileGetTime($path[UBound($path)-1][0],0,1)
        WEnd
        FileClose($hSearch)

        _ArraySort($path,0,0,0,$sort)
        Local $array[UBound($path)]
        For $i=0 To UBound($path)-1
                $array[$i]=$path[$i][0]
        Next
        Return $array
        
EndFunc;==>_FileListToArray


发表于 2011-12-17 12:13:52 | 显示全部楼层
还可以改个FTP的吧呵呵
 楼主| 发表于 2011-12-17 14:45:12 | 显示全部楼层
回复 6# 3mile

我也在GOOGLE上找到了,列表文件by date ,和二级目录搜索,但把两者合起来就总是出错。请问怎么加入二级目录搜索,谢谢。
发表于 2011-12-17 14:45:33 | 显示全部楼层
楼主这个问题貌似没问清楚吧,文件时间起码有两个,创建时间和最后修改时间
发表于 2011-12-17 15:17:26 | 显示全部楼层
本帖最后由 netegg 于 2011-12-17 15:50 编辑

[au3]#include<array.au3>
Global $ret
$ret = _filedatesort('D:\software', 0, 1)
_ArrayDisplay($ret)
#cs
        ==================================================================
        $current  工作目录
        $iflag:   指定日期类型标记,可为:
        0 - 修改时间(默认)
        1 - 创建时间
        2 - 访问时间
        $isort: 降序升序标记
        0 - 升序
        1 - 降序
        返回值:   成功 : 根据$iflag返回结果
        失败: 返回0并设置@error非0, 可为:
        ======================================================1================
#ce
Func _filedatesort($current, $iflag = 0, $isort = 1)
        Dim $aA[2][2], $i = 0
        Local $search = FileFindFirstFile($current & "\*.*")
        While 1
                Dim $file = FileFindNextFile($search)
                If @error Then ExitLoop
                If Not StringInStr(FileGetAttrib($current & "\" & $file), "D") And ($file <> "." Or $file <> "..") Then
                        $aA[$i][0] = $current & "\" & $file
                        $aA[$i][1] = FileGetTime($current & "\" & $file, $iflag, 1)
                        $i += 1
                        ReDim $aA[$i + 1][2]
                EndIf
                If StringInStr(FileGetAttrib($current & "\" & $file), "D") And ($file <> "." Or $file <> "..") Then
                        _filedatesort($current & "\" & $file, $iflag)
                EndIf
        WEnd
        ReDim $aA[$i][2]
        _ArraySort($aA, $isort, 0, 0, 1)
        Return $aA
EndFunc   ;==>_filedatesort

[/au3]
好像有点问题,参数设置有些毛病,再考虑下
发表于 2011-12-17 15:25:10 | 显示全部楼层
回复 8# q113960096
不理解你的意思,上代码说话
 楼主| 发表于 2011-12-17 16:30:14 | 显示全部楼层
回复 11# 3mile

搜索硬盘所有分区根目录文件和二级目录,找到 ghost 文件,返回最新的 ghost 文件。谢谢!
 楼主| 发表于 2011-12-17 16:32:56 | 显示全部楼层
回复 10# netegg

这个的确是有些麻烦。以下是老外的代码(搜索文件并按日期排列):
#include <file.au3>
#include <array.au3>

Global $spath = @WindowsDir ;Change it to whatever you need
$checkpath = StringRegExp($spath, "^.+\\$", 0)
If $checkpath = 0 Then $spath = $spath & ""

$aArray = _FileListToArray($spath, "*", 1)
If Not IsArray($aArray) Then
        MsgBox(0, "", "Sorry but " & $spath & " has no files")
        Exit
EndIf

Global $aArray2D[10][2]
ReDim $aArray2D[$aArray[0] + 1][2]
$aArray2D[0][0] = $aArray[0]

For $i = 1 To $aArray[0]
        $aArray2D[$i][0] = $aArray[$i]
        $aArray2D[$i][1] = FileGetTime($spath & $aArray[$i], 0, 1)
Next

_ArraySort($aArray2D, 1, 1, "", 1)
_ArrayDisplay($aArray2D)
问题就是无法插入递归进行二级目录搜索。头都想痛了!
 楼主| 发表于 2011-12-17 16:34:13 | 显示全部楼层
回复 9# netegg
默认修改时间,谢谢
发表于 2011-12-17 17:25:14 | 显示全部楼层
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-5-20 23:05 , Processed in 0.079142 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表