Nội công quả là thâm hậu-Tầm cỡ Bang Chủ cái bang! :))))) (1 người xem)

  • Thread starter Thread starter KUMI
  • Ngày gửi Ngày gửi
Liên hệ QC

Người dùng đang xem chủ đề này

KUMI

Bụi phấn
Tham gia
17/1/12
Bài viết
564
Được thích
571
Duyệt file (folder) trong 1 folder cho trước và tạo Hyperlink

Tôi không cần ai cám ơn đâu. Cái tôi cần là test hộ. Rất nhiều lần tôi nhờ test hộ thì chả ai giúp tôi cả. Tại sao tôi nhờ test? Cái thứ nhất là xem tốc độ. Cái nữa là biết đâu code sai. Thường thì cái lỗi của người khác nhìn bao giờ cũng thấy như con voi còn lỗi của bản thân nó cứ như con kiến ấy. Vì thế con người ai cũng nhìn thấy rõ lỗi của người khác nhưng lỗi của bản thân sao khó thấy thế.
----------------
Tôi tự phát hiện ra trường hợp thiếu kết quả. Khi filename = "*" thì có đầy đủ kết quả. Khi vd. filename = "*.txt" và SubDir = TRUE thì kết quả trả về y như là SubDir = FALSE, tức chỉ có kết quả khớp từ thư mục đầu tiên. Trong code dưới những chỗ sửa hoặc thêm vào tôi đánh dấu mầu đỏ đỏ. Nhờ mọi người tiếp tục kiểm tra hộ
------------
Nhân tiện nhờ mọi người test hộ. Tôi muốn test chủ yếu cho trường hợp tìm các tập tin hoặc cả tập tin và thư mục, tìm cả ở các thư mục con. Kết quả trả về là tên, độ lớn và ngày tạo. Thư mục bắt đầu là "C:\" Code của tôi không lấy các tập tin và thư mục có trong sọt rác - RECYCLE, RECYCLER Tóm lại là chạy code sub myTest. Module
Mã:
Private Const FILE_ATTRIBUTE_DIRECTORY As Long = &H10
Private Const MAX_PATH As Long = 260
Private Const INVALID_HANDLE_VALUE As Long = &HFFFFFFFF  '((Handle) - 1)

Private Type FILETIME
    dwLowDateTime As Long
    dwHighDateTime As Long
End Type

Private Type SYSTEMTIME
    wYear As Integer
    wMonth As Integer
    wDayOfWeek As Integer
    wDay As Integer
    wHour As Integer
    wMinute As Integer
    wSecond As Integer
    wMilliseconds As Integer
End Type

Private Type WIN32_FIND_DATA
    dwFileAttributes As Long
    ftCreationTime As FILETIME
    ftLastAccessTime As FILETIME
    ftLastWriteTime As FILETIME
    nFileSizeHigh As Long
    nFileSizeLow As Long
    dwReserved0 As Long
    dwReserved1 As Long
    cFileName As String * MAX_PATH
    cAlternate As String * 14
End Type

Public Enum FIND_FILE_OPTION
    FileOnly = 1
    DirectoryOnly = 2
    AllFiles = 3
End Enum

Public Enum FIND_RESULT_OPTION
    frName = 1
    frNameSize = 3
    frNameDate = 5
    frNameSizeDate = 7
End Enum

Private Declare Function FileTimeToLocalFileTime Lib "kernel32.dll"  (ByRef lpFileTime As FILETIME, ByRef lpLocalFileTime As FILETIME) As  Long
Private Declare Function FileTimeToSystemTime Lib "kernel32.dll" (ByRef  lpFileTime As FILETIME, ByRef lpSystemTime As SYSTEMTIME) As Long

Private Declare Function GetTickCount Lib "kernel32" () As Long
Private Declare Function FindClose Lib "kernel32.dll" (ByVal hFindFile As Long) As Long
Private Declare Function FindFirstFileW Lib "kernel32.dll" (ByVal  lpFileName As String, ByRef lpFindFileData As WIN32_FIND_DATA) As Long
Private Declare Function FindNextFileW Lib "kernel32.dll" (ByVal  hFindFile As Long, ByRef lpFindFileData As WIN32_FIND_DATA) As Long

Private Const recycle = "RECYCLE"

Function UTCtoSysTime(fTime As FILETIME) As String
Dim LocalFileTime As FILETIME, SysTime As SYSTEMTIME
    If ((fTime.dwLowDateTime <> 0) Or (fTime.dwHighDateTime <> 0)) And _
      FileTimeToLocalFileTime(fTime, LocalFileTime) And FileTimeToSystemTime(LocalFileTime, SysTime) Then
        UTCtoSysTime = DateSerial(SysTime.wYear, SysTime.wMonth, SysTime.wDay) & " " _
            & TimeSerial(SysTime.wHour, SysTime.wMinute, 0)
    End If
End Function

Sub FindMatchedFilesExtW(arr, DirSize As Double, ByVal DirStart As  String, ByVal filename As String, Optional ByVal res_option As  FIND_RESULT_OPTION = frName, _
    Optional ByVal SubDir As Boolean = True, Optional ByVal find_option As FIND_FILE_OPTION = FileOnly)
' Arr: maŇng chýěa kęět quaŇ traŇ vęĚ laĚ maŇng 2 chięĚu
' SubDir: nęěu TRUE thiĚ tim caŇ trong caěc thý muňc con
' find_option = 3 (AllFiles) - tiĚm tâňp tin vaĚ thý muňc, 1 (FileOnly) -  chiŇ tiĚm tâňp tin, 2 (DirectoryOnly) - chiŇ tiĚm thý muňc
'    DirSize chi dung cho vai th, vd. filename = "*", find_option = FileOnly, SubDir = True
'    ----------------------------------------
'    vd. caěch duĚng
'    FindMatchedFilesExtW arr, size, "C:\", "*", frNameSizeDate, , FileOnly
'    Application.ScreenUpdating = False
'    Range("A1").Resize(UBound(arr) + 1, UBound(arr, 2) + 1).Value = arr
'    Application.ScreenUpdating = True
    
Dim FindData As WIN32_FIND_DATA
Dim FindHandle As Long
Dim validDir As Boolean, IsFile As Boolean, doAdd As Boolean
Dim fName As String, k As Long, r As Long, c As Long, dSize As Double, size As Long
Static level As Long
On Error Resume Next

    If Right(DirStart, 1) <> "\" Then DirStart = DirStart & "\"
    
    [B][COLOR=#ff0000]If Not SubDir And (find_option = FileOnly) Then      [/COLOR][/B][COLOR=#0000ff]<--- thay cho [/COLOR][COLOR=#ff0000]fName = StrConv(DirStart & filename, vbUnicode)[/COLOR]
[B][COLOR=#ff0000]        fName = StrConv(DirStart & filename, vbUnicode)
    Else
        fName = StrConv(DirStart & "*", vbUnicode)
    End If[/COLOR][/B]
    
    FindHandle = FindFirstFileW(fName, FindData)
    
    If FindHandle <> INVALID_HANDLE_VALUE Then
        If res_option = frName Then
            size = 0
        ElseIf res_option = frNameSizeDate Then
            size = 2
        Else
            size = 1
        End If
        doAdd = SubDir Or (level = 0)
        Do
            fName = StrConv(FindData.cFileName, vbFromUnicode)
            k = InStr(1, fName, vbNullChar)
            fName = Left(fName, k - 1)
            
            validDir = (FindData.dwFileAttributes And FILE_ATTRIBUTE_DIRECTORY) = FILE_ATTRIBUTE_DIRECTORY
            IsFile = Not validDir
            
            If IsFile Then DirSize = DirSize + FindData.nFileSizeLow
            
            If validDir Then validDir = (Left(fName, 1) <> ".") And (InStr(1, fName, recycle, vbTextCompare) <> 1)

            If validDir Then
                If SubDir Or ((find_option > 1) And ((res_option And 2) = 2)) Then
                    level = level + 1
                    dSize = 0
                    FindMatchedFilesExtW arr, dSize, DirStart & fName, filename, res_option, SubDir, find_option
                    level = level - 1
                    DirSize = DirSize + dSize
                End If
            End If
            [B][COLOR=#ff0000]If fName Like filename Then[/COLOR][/B]    [COLOR=#0000ff]<--- them[/COLOR]
                If doAdd And ((validDir And (find_option > 1)) Or (IsFile And (find_option <> 2))) Then
                    If IsEmpty(arr) Then
                        ReDim arr(0 To size)
                    Else
                        ReDim Preserve arr(0 To UBound(arr) + size + 1)
                    End If
                    
                    arr(UBound(arr) - size) = DirStart & fName
                    If (res_option And 2) = 2 Then
                        If IsFile And (find_option <> 2) Then
                            arr(UBound(arr) - size + 1) = FindData.nFileSizeLow
                        Else
                            arr(UBound(arr) - size + 1) = dSize
                        End If
                    End If
                    
                    If (res_option And 4) = 4 Then arr(UBound(arr)) = UTCtoSysTime(FindData.ftCreationTime)
                End If
            [B][COLOR=#ff0000]End If[/COLOR][/B]     [COLOR=#0000ff]<--- them[/COLOR]
        Loop Until FindNextFileW(FindHandle, FindData) = 0
        FindClose (FindHandle)
    End If
   
    If level = 0 Then
        ReDim resArr(0 To (UBound(arr) + 1) \ (size + 1) - 1, 0 To size) As String
        For r = 0 To UBound(resArr)
            k = (size + 1) * r
            For c = 0 To size
                resArr(r, c) = arr(k + c)
            Next c
        Next r
        arr = resArr
    End If
End Sub

Sub myTest()
Dim t As Double, arr, size As Double
    Range("A:C").Clear
    
    t = Timer
    FindMatchedFilesExtW arr, size, "c:\", "*", frNameSizeDate, , FileOnly
    If IsEmpty(arr) Then Exit Sub
    Debug.Print "siwtom code: " & UBound(arr) + 1 & " files (or folders) found!", , Format(Timer - t, "0.0") & "s"
    Debug.Print size
    
    Application.ScreenUpdating = False
    Range("A1").Resize(UBound(arr) + 1, UBound(arr, 2) + 1).Value = arr
    Application.ScreenUpdating = True
End Sub

================================================
Hixx! @@! Con xem cái đoạn code trên của Thầy siwtom & Thầy ndu96081631
chỉ nhìn thôi mà đã thấy kinh hoàng đến phát zét, :)) ,Cứ nghĩ rằng 2 Thầy là người ngoài hành tinh thì đúng! ha ha ha!!!!!!!!!!!!!! :)))))))))... hix!
------------------
Kinh mong 2 Thầy đừng giận ạ,Con xem bài viết Thấy căng thẳng nên muốn thư giãn (spam) 1 chút cho khuây khỏa ạ! Nhưng thật sự với Con thì nằm mơ cũng không thể hình dung được cái đoạn code loằng ngoằng đó..hihi
 
Lần chỉnh sửa cuối:
Duyệt file (folder) trong 1 folder cho trước và tạo Hyperlink



================================================
Hixx! @@! Con xem cái đoạn code trên của Thầy siwtom & Thầy ndu96081631
chỉ nhìn thôi mà đã thấy kinh hoàng đến phát zét, :)) ,Cứ nghĩ rằng 2 Thầy là người ngoài hành tinh thì đúng! ha ha ha!!!!!!!!!!!!!! :)))))))))... hix!

Ông kia NGOÀI HÀNH TINH thôi chứ mình chưa đủ năng lượng để phóng tên lửa đâu
Ẹc... Ẹc...

[h=2]Nội công quả là thâm hậu-Tầm cỡ Bang Chủ cái bang! :)))))[/h]
Mà dạo này bộ người ta đã cho ăn mày lên không gian rồi sao ta?
 
Sặx! Chết mất thôi Thầy Ơi càng đọc lại càng không thể nhịn nổi cười.. Chắc lát nữa con phải ra Hiệu Răng Hàm Mặt gần nhà để "CÂN" lại cái quai hàm mất hix! cưới trẹo cả khớp! :))))))))))
 
Ông kia NGOÀI HÀNH TINH thôi chứ mình chưa đủ năng lượng để phóng tên lửa đâu
Ẹc... Ẹc...

Tôi có đủ năng lượng chăng nữa (giả sử bỏ tiền ra mua) thì cũng không tham gia vụ "lên hành tinh". Mà có chết cũng mong được xuống địa ngục. Trên "trời" thì đẹp đấy nhưng mà thiên thần nam thiên thần nữ cứ xếp hàng rồi cả ngày ca hát thì chán chết. Dưới địa ngục thì cái gì cũng có: rượu có, đồ nhắm có, gái "hư" cũng có. Những cái đó trên trời làm gì có, he he he
 
Tôi có đủ năng lượng chăng nữa (giả sử bỏ tiền ra mua) thì cũng không tham gia vụ "lên hành tinh". Mà có chết cũng mong được xuống địa ngục. Trên "trời" thì đẹp đấy nhưng mà thiên thần nam thiên thần nữ cứ xếp hàng rồi cả ngày ca hát thì chán chết. Dưới địa ngục thì cái gì cũng có: rượu có, đồ nhắm có, gái "hư" cũng có. Những cái đó trên trời làm gì có, he he he
Rất thú vị! Mình thích cái cảm giác này!
 
Hai thày được phong làm "Vua ăn mày" rồi , từ nay không phải đi làm nữa, sướng có nhât trần đời . Mà những thứ thày siwtom nói dưới địa ngục có không ta ? thày quảng cáo thế tội phạm tăng đấy .
 
Hai thày được phong làm "Vua ăn mày" rồi , từ nay không phải đi làm nữa, sướng có nhât trần đời . Mà những thứ thày siwtom nói dưới địa ngục có không ta ? thày quảng cáo thế tội phạm tăng đấy .
Nếu đúng như những gì anh siwtom nói về cái vụ "địa ngục" kia thì Biên Hòa đúng là ĐỊA NGỤC goài
Anh em về đây chơi thôi
Ẹc... Ẹc...
 
Web KT

Bài viết mới nhất

Back
Top Bottom