q113960096 发表于 2011-12-15 21:34:02

怎么将文件列表按照日期排列【已解决】

本帖最后由 q113960096 于 2011-12-22 09:24 编辑

先将文件读取到数组,然后将文件列表按照日期排列,得到最近的文件名称,谢谢。

tsui 发表于 2011-12-15 22:25:35

要么用命令行dir,要么是au3的FileGetTime+_FileListtoArray

q113960096 发表于 2011-12-16 10:17:05

回复 2# tsui

这我也想到了,就不知道具体怎么操作。

zxxputian1 发表于 2011-12-16 12:49:44

能否举个例子最好

q113960096 发表于 2011-12-16 13:02:05

回复 4# zxxputian1

对啊,dir 这个就不用了。au3 的可以举

3mile 发表于 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
        $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
                $path=$sPath&$sFile
                $path=FileGetTime($path,0,1)
        WEnd
        FileClose($hSearch)

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


menfan1 发表于 2011-12-17 12:13:52

还可以改个FTP的吧呵呵

q113960096 发表于 2011-12-17 14:45:12

回复 6# 3mile

我也在GOOGLE上找到了,列表文件by date ,和二级目录搜索,但把两者合起来就总是出错。请问怎么加入二级目录搜索,谢谢。

netegg 发表于 2011-12-17 14:45:33

楼主这个问题貌似没问清楚吧,文件时间起码有两个,创建时间和最后修改时间

netegg 发表于 2011-12-17 15:17:26

本帖最后由 netegg 于 2011-12-17 15:50 编辑

#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, $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] = $current & "\" & $file
                        $aA[$i] = FileGetTime($current & "\" & $file, $iflag, 1)
                        $i += 1
                        ReDim $aA[$i + 1]
                EndIf
                If StringInStr(FileGetAttrib($current & "\" & $file), "D") And ($file <> "." Or $file <> "..") Then
                        _filedatesort($current & "\" & $file, $iflag)
                EndIf
        WEnd
        ReDim $aA[$i]
        _ArraySort($aA, $isort, 0, 0, 1)
        Return $aA
EndFunc   ;==>_filedatesort


好像有点问题,参数设置有些毛病,再考虑下

3mile 发表于 2011-12-17 15:25:10

回复 8# q113960096
不理解你的意思,上代码说话

q113960096 发表于 2011-12-17 16:30:14

回复 11# 3mile

搜索硬盘所有分区根目录文件和二级目录,找到 ghost 文件,返回最新的 ghost 文件。谢谢!

q113960096 发表于 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
ReDim $aArray2D[$aArray + 1]
$aArray2D = $aArray

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

_ArraySort($aArray2D, 1, 1, "", 1)
_ArrayDisplay($aArray2D)
问题就是无法插入递归进行二级目录搜索。头都想痛了!

q113960096 发表于 2011-12-17 16:34:13

回复 9# netegg
默认修改时间,谢谢

3mile 发表于 2011-12-17 17:25:14

回复 12# q113960096
http://www.autoitx.com/forum.php?mod=viewthread&tid=16645&fromuid=7639113
页: [1] 2
查看完整版本: 怎么将文件列表按照日期排列【已解决】