2012-11-09 44 views
0

我需要找到具有給定目錄中最新日期的文件。我是不是比VB6中的初學者,這就是我需要用於一些舊代碼。迄今爲止,在谷歌殺死Google之後是我迄今爲止所擁有的。但它沒有找到正確的文件。有人可以幫忙嗎? 感謝試圖在VB6文件夾中查找文件的最新日期的問題

Dim sFile1 As String 
Dim sFile2 As String 
Dim dFile1Date As Date 
Dim dFile2Date As Date 

sFile1 = Dir("c:\test\*.*", vbNormal) 

Do 
    sFile2 = Dir 
    If sFile1 <> "" Then dFile1Date = FileDateTime("c:\test\" & sFile1) 
    If sFile2 <> "" Then dFile2Date = FileDateTime("c:\test\" & sFile2) 

    If dFile1Date > dFile2Date Then sFile2 = sFile1 

Loop Until sFile2 = "" 

FormVersionDate = sFile1 
Call MsgBox(FormVersionDate, vbExclamation, App.Title) 

回答

3

如果您通過您的代碼步,你會看到sFile1永遠不會不管你的邏輯的結果重新分配,因此調用它的價值在年底使所有的DO循環無關。此外,它看起來像FormVersionDate可能應該是一個日期,但你分配一個字符串,而不是。

我重新寫你的代碼嵌套循環,以避免邏輯,如果這是無關緊要的過多評論:

Dim sFile1 As String 
Dim sFile2 As String 
Dim dFile1Date As Date 
Dim dFile2Date As Date 

'Get first File 
sFile1 = Dir("c:\test\*.*", vbNormal) 
'Make sure file exists 
If sFile1 <> "" Then 
    'Since file exists retrieve DateTime for file 
    dFile1Date = FileDateTime("c:\test\" & sFile1) 
    'begin loop for other files 
    Do 
     'Retrieve new file 
     sFile2 = Dir 
     'Make sure file exists 
     If sFile2 <> "" Then 
      'Retrieve DateTime for file 
      dFile2Date = FileDateTime("c:\test\" & sFile2) 
      'If old DateTime is older than new DateTime 
      If dFile1Date < dFile2Date Then 
       'Overwrite first file variables with newer file info 
       sFile1 = sFile2 
       dFile1Date = dFile2Date 
      End If 
     End If 
     'Loop until new file doesn't exist 
    Loop Until sFile2 = "" 
End If 
'If you actually want the date, you should use dFile1Date instead of sFile1. 
FormVersionDate = sFile1 
Call MsgBox(FormVersionDate, vbExclamation, App.Title) 
+0

謝謝。我也很欣賞詳細的解釋。 – AngryTech

2

有很多關於試圖通過變量名來溝通可說。結果往往比添加大量補償性評論更爲明確,尤其是在一個簡短的程序中。

Dim Directory As String 
Dim CurrFile As String 
Dim CurrDate As Date 
Dim NewestDate As Date 
Dim NewestFile As String 

Directory = "c:\test\" 
CurrFile = Dir$(Directory & "*.*", vbNormal) 
Do While Len(CurrFile) > 0 
    CurrDate = FileDateTime(Directory & CurrFile) 
    If CurrDate > NewestDate Then 
     NewestDate = CurrDate 
     NewestFile = CurrFile 
    End If 
    CurrFile = Dir$() 
Loop 
MsgBox CStr(NewestDate) & vbNewLine & NewestFile 

請注意,這並不檢測並警告其中沒有可見文件的目錄。不過,您可以只查找一個空的(「」)NewestFile

相關問題