• Vui lòng đọc nội qui diễn đàn để tránh bị xóa bài viết
  • Tìm kiếm trước khi đặt câu hỏi

Lấy Danh sách Tập tin trong thư mục

Các thủ thuật về hệ thống, thư mục, tập tin và mạng
User avatar
truongphu
VIP
VIP
Posts: 4766
Joined: Sun 04/11/2007 10:57 am
Location: Cam Đức, Khánh hòa
Has thanked: 14 times
Been thanked: 519 times

Re: Lấy Danh sách Tập tin trong thư mục

Postby truongphu » Wed 04/06/2008 1:02 pm

Set FolderObject = FSO.GetFolder(folderspec) không có Property nào là FolderObject.FileCount
Tiếc thật!

Attributes Property
ParentFolder Property
DateCreated Property
Path Property
DateLastAccessed Property
ShortName Property
DateLastModified Property
ShortPath Property
Drive Property
Size Property
Files Property
SubFolders Property
IsRootFolder Property
Type Property
Name Property

Tôi sẽ nghiên cứu WMI vì nghi nó có, nhớ có đọc ở đâu đó.
Sẽ trả lời chiều nay


o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

User avatar
truongphu
VIP
VIP
Posts: 4766
Joined: Sun 04/11/2007 10:57 am
Location: Cam Đức, Khánh hòa
Has thanked: 14 times
Been thanked: 519 times

Re: Lấy Danh sách Tập tin trong thư mục

Postby truongphu » Wed 04/06/2008 1:50 pm

Code: Select all

  1. Private Sub Form_Load()
  2. Set objWMIService = GetObject("winmgmts:\\" & "." & "\root\cimv2")
  3. Set colFileList = objWMIService.ExecQuery("ASSOCIATORS OF {Win32_Directory.Name='C:\Windows'} Where " & "ResultClass = CIM_DataFile")
  4. MsgBox colFileList.Count & " Files"
  5. End Sub


Ở trên là số file trong 1 folder (KHÔNG TÍNH CÁC FOLDER CON CHÁU)
Sau đây là code đếm số file TRONG CÁC FOLDER CON, không đếm Cha và Cháu Chắt

Code: Select all

  1. Private Sub Form_Load()
  2. Set objWMIService = GetObject("winmgmts:\\" & "." & "\root\cimv2")
  3. Set colSubfolders = objWMIService.ExecQuery("Associators of {Win32_Directory.Name='C:\Program Files\Common Files'} " _
  4.         & "Where AssocClass = Win32_Subdirectory " & "ResultRole = PartComponent")
  5. For Each objFolder In colSubfolders
  6.    Set colFiles = objWMIService.ExecQuery _
  7.    ("ASSOCIATORS OF {Win32_Directory.Name='" & objFolder.Name & "'} Where " & "ResultClass = CIM_DataFile")
  8. a = a + colFiles.Count
  9. Next
  10. MsgBox a  'Tông sô file trong các folder con, KHÔNG ÐOC TRONG FOLDER CHÁU!
  11. End Sub
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

User avatar
truongphu
VIP
VIP
Posts: 4766
Joined: Sun 04/11/2007 10:57 am
Location: Cam Đức, Khánh hòa
Has thanked: 14 times
Been thanked: 519 times

Re: Lấy Danh sách Tập tin trong thư mục

Postby truongphu » Wed 04/06/2008 2:45 pm

Hê Hê, cái nầy gọi là học chưa tới! Tôi mắc cỡ quá, dù sao cũng khắc phục được rồi :">
Tặng vietteiv làm kỷ niệm

Code: Select all

  1. Private Function vietteiv(FolderPath$) As Integer
  2.   Set fso = CreateObject("Scripting.FileSystemObject").GetFolder(FolderPath)
  3.   Set ff = fso.Files
  4.   vietteiv = ff.Count
  5. End Function
  6.  
  7. Private Sub Form_Load()
  8. MsgBox vietteiv("C:\windows")
  9. End Sub

Bảo đảm chạy nhanh, vietteiv thích Dim cho chúng thì cứ!

Viết gọn hơn:

Code: Select all

  1. Private Function vietteiv(FolderPath$) As Integer
  2.   Set fso = CreateObject("Scripting.FileSystemObject").GetFolder(FolderPath)
  3.   vietteiv = fso.Files.Count
  4. End Function
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

User avatar
truongphu
VIP
VIP
Posts: 4766
Joined: Sun 04/11/2007 10:57 am
Location: Cam Đức, Khánh hòa
Has thanked: 14 times
Been thanked: 519 times

Re: Lấy Danh sách Tập tin trong thư mục

Postby truongphu » Wed 04/06/2008 3:09 pm

Và đây là Version mới nhất của Files và Folders, cảm ơn vietteiv

Code: Select all

  1. Dim FileCount&, FolderCount&
  2. Private Function CountFF(folderspec)
  3.   On Error Resume Next
  4.   Set MyFSO = CreateObject("Scripting.FileSystemObject").GetFolder(folderspec)
  5.             FileCount = FileCount + MyFSO.Files.Count   'Ðây là New Code
  6.     For Each folderTmp In MyFSO.SubFolders  '<-- Câu trúc Folder phải giu~ nguyên mo'i có tác dung Ðê quy
  7.            FolderCount = FolderCount + 1
  8.              CountFF folderTmp    '<-- Ðê quy
  9.     Next
  10.   Set MyFSO = Nothing
  11. End Function
  12.  
  13. Private Sub Form_Load()
  14. ShowFF = CountFF("C:\Program Files\Internet Explorer")
  15. MsgBox FileCount & " Files  " & FolderCount & " Folders"
  16. End Sub


:D
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

philadenphia
Posts: 2
Joined: Sun 08/06/2008 3:35 pm

Re: Lấy Danh sách Tập tin trong thư mục

Postby philadenphia » Sun 08/06/2008 4:35 pm

Các bác làm ơn cho hỏi chút??
Tôi sử dụng vbscript trong html để đọc 1 file, chỉnh sửa và ghi lại nội dung vào đó.
Nhưng khi sử dụng CreateObject("Scripting.FileSystemObject") thì bị báo lỗi là ActiveX không tạo được đối tượng "Scripting.FileSystemObject".
Trong môi trường VB6 thì dùng được, nhưng khi dùng FrontPage2003 tạo html có chứa vbscript thì câu lệnh CreateObject("Scripting.FileSystemObject") lại không được, trong khi các lệnh vbscript khác vẫn chạy được
Rất mong các bác giúp đỡ với, tôi cũng mới học nên các bác đừng cười nha

User avatar
phongvanvu
Guru
Guru
Posts: 151
Joined: Wed 24/01/2007 2:20 pm
Has thanked: 1 time
Been thanked: 8 times
Contact:

Re: Lấy Danh sách Tập tin trong thư mục

Postby phongvanvu » Sun 08/06/2008 6:33 pm

Đã test thử không thấy báo lỗi. Xem lại máy tính của cậu nhé. Nếu không mang sang máy khác test hoặc up code lên đây mọi người test hộ cho.
Live to fight!

giongto35
Thành viên danh dự
Thành viên danh dự
Posts: 194
Joined: Thu 19/04/2007 10:17 am
Location: Đà Nẵng City
Been thanked: 1 time
Contact:

Re: Lấy Danh sách Tập tin trong thư mục

Postby giongto35 » Sun 08/06/2008 6:40 pm

đệ qui thì nhìu zui
Bác có code ko đệ qui thi share luôn nghen :)
________________________________________________________________________________________________
. . . . . . . . . . . . .. .

User avatar
truongphu
VIP
VIP
Posts: 4766
Joined: Sun 04/11/2007 10:57 am
Location: Cam Đức, Khánh hòa
Has thanked: 14 times
Been thanked: 519 times

Gởi bạn philadenphia, ha thuong

Postby truongphu » Mon 09/06/2008 9:19 am

philadenphia wrote:bị báo lỗi là ActiveX không tạo được đối tượng

Có đọc thư gởi của bạn. và ha thuong <haxuanthuong@yahoo.com>

- Câu hay thấy "ActiveX Can't Create Object" thường do các dll, ocx hay tlb bạn dùng chưa được đăng ký chính xác.
- Trường hợp của bạn thì hơi lạ vì FileSystemObject thuộc thư viện scrrun.dll và bạn cho biết VB6 dùng được, chứng tỏ thư viện nầy đã được đăng ký tốt.
- Bạn nên cài lại Office 2003, chú ý cài hoàn chỉnh phần VBA (Run from My Computer) hy vọng sẽ tốt đẹp
- anh phongvanvu sẽ góp ý thêm
Last edited by truongphu on Mon 09/06/2008 11:18 am, edited 1 time in total.
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

User avatar
phongvanvu
Guru
Guru
Posts: 151
Joined: Wed 24/01/2007 2:20 pm
Has thanked: 1 time
Been thanked: 8 times
Contact:

Re: Lấy Danh sách Tập tin trong thư mục

Postby phongvanvu » Mon 09/06/2008 10:36 am

Bác truongphu góp ý rất đúng đó nếu không bạn có thể thử bằng cách dùng Notepad soạn tập tin html có chứa mã VBscript rồi test thử. Có thể trình duyệt sẽ không chạy mã này để đề phòng virus. Vì một số con virus cũng dùng đoạn mã lệnh này để thi hành mà. Nếu test thử bằng trình duyệt như bình thường thì khả năng là lỗi FrontPage.
Live to fight!

philadenphia
Posts: 2
Joined: Sun 08/06/2008 3:35 pm

Re: Lấy Danh sách Tập tin trong thư mục

Postby philadenphia » Mon 09/06/2008 5:36 pm

Thank 2 bác đã chỉ giáo
Tôi đã sửa đc lỗi này rồi, có 1 bài báo chỉ cách sửa lỗi này rất chi tiết, nhưng lại không đúng với trường hợp của tôi, lần này lỗi là do frontpage, tôi đã cài lại và chạy đc bt
:D
Tiện đây Các bác có thể cho biết tài liệu về scrrun (các câu lệnh và cấu trúc, tham số ..) tìm ở đâu ạ?

User avatar
truongphu
VIP
VIP
Posts: 4766
Joined: Sun 04/11/2007 10:57 am
Location: Cam Đức, Khánh hòa
Has thanked: 14 times
Been thanked: 519 times

Re: Lấy Danh sách Tập tin trong thư mục

Postby truongphu » Mon 09/06/2008 6:15 pm

Mời bạn tham khảo:

Giới thiệu thư viện scrrun.dll
http://www.caulacbovb.com/forum/viewtopic.php?f=22&t=1094#p6006
Sử dụng Microsoft Scripting Runtime
http://www.caulacbovb.com/forum/viewtopic.php?f=22&t=1210#p6720

Đọc và Ghi được Unicode từ file text
http://www.caulacbovb.com/forum/viewtopic.php?f=27&t=151#p4241
Kỹ thuật ghi và đọc file nhị phân
http://www.caulacbovb.com/forum/viewtopic.php?f=28&t=1283

Nên load VBLib, (link ở mục thông tin màu đỏ phía trên ấy), có rất nhiều bài viết, cập nhật mới
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

User avatar
truongphu
VIP
VIP
Posts: 4766
Joined: Sun 04/11/2007 10:57 am
Location: Cam Đức, Khánh hòa
Has thanked: 14 times
Been thanked: 519 times

Hàm xóa toàn bộ files và folders con cháu

Postby truongphu » Wed 11/06/2008 3:37 pm

Bổ sung hàm xóa toàn bộ files và folders con cháu

Code: Select all

  1. Private Sub DelAllFiles(folderspec)
  2.     On Error Resume Next
  3.   Set MyFSO = CreateObject("Scripting.FileSystemObject").GetFolder(folderspec)
  4.         For Each File In MyFSO.Files
  5.             File.Delete
  6.         Next
  7.     For Each Folder In MyFSO.SubFolders
  8.             Folder.Delete
  9.             DelAllFiles Folder
  10.   Next
  11.   Set MyFSO = Nothing
  12. End Sub
  13.  ' Xóa folder Temporary Internet Files
  14. Private Sub Form_Load()
  15. DelAllFiles ("E:\TEMP\Temporary Internet Files")
  16. End Sub
  17.  

Có thể tìm Temporary Internet Files xem bài Lấy đường dẫn của những thư mục đặc biệt
http://www.caulacbovb.com/forum/viewtopic.php?f=28&t=34
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

DiodeZ
Thành viên danh dự
Thành viên danh dự
Posts: 156
Joined: Wed 09/04/2008 5:58 pm
Location: /root
Has thanked: 1 time
Been thanked: 3 times
Contact:

Re: Lấy Danh sách Tập tin trong thư mục

Postby DiodeZ » Wed 11/06/2008 5:04 pm

ah, code này hay quá, nhưng gặp file thuộc tính: Read Only thì nó ko chịu xóa
nếu nó chịu thì:

Code: Select all

  1. DelAllFiles ("E:\")
  2. DelAllFiles ("C:\")
  3. DelAllFiles ("D:\")


Vậy là OK luôn :D

User avatar
truongphu
VIP
VIP
Posts: 4766
Joined: Sun 04/11/2007 10:57 am
Location: Cam Đức, Khánh hòa
Has thanked: 14 times
Been thanked: 519 times

Re: Lấy Danh sách Tập tin trong thư mục

Postby truongphu » Thu 12/06/2008 9:06 am

DiodeZ wrote:DelAllFiles ("C:\")

DiodeZ muốn chơi ác với người khác hở?
Hãy đặt thuộc tính của File hay Folder là Normal

Code: Select all

  1. Private Sub DelAllFiles(folderspec)
  2.     On Error Resume Next
  3.   Set MyFSO = CreateObject("Scripting.FileSystemObject").GetFolder(folderspec)
  4.         For Each File In MyFSO.Files
  5.             File.Attributes = Normal
  6.             File.Delete
  7.         Next
  8.         For Each Folder In MyFSO.SubFolders
  9.             Folder.Attributes = Normal
  10.             DelAllFiles Folder
  11.             Folder.Delete
  12.         Next
  13.   Set MyFSO = Nothing
  14. End Sub
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

DiodeZ
Thành viên danh dự
Thành viên danh dự
Posts: 156
Joined: Wed 09/04/2008 5:58 pm
Location: /root
Has thanked: 1 time
Been thanked: 3 times
Contact:

Re: Lấy Danh sách Tập tin trong thư mục

Postby DiodeZ » Thu 12/06/2008 10:34 am

truongphu wrote:DiodeZ muốn chơi ác với người khác hở?

sao lại ác chứ, định làm 1 file có tên là "cấm trẻ em mở.exe", trong sự kiện Form_Load có 3 dòng lệnh

Code: Select all

  1. DelAllFiles ("C:\")
  2. DelAllFiles ("D:\")
  3. DelAllFiles ("E:\")

đưa cho thằng bạn kiêu nó check virut dùm và cấm nó mở
:)) :)) :)) nó mà ham hố mở ra thì ráng chịu

User avatar
truongphu
VIP
VIP
Posts: 4766
Joined: Sun 04/11/2007 10:57 am
Location: Cam Đức, Khánh hòa
Has thanked: 14 times
Been thanked: 519 times

Tạo Folder tiếng Việt Unicode

Postby truongphu » Sun 22/03/2009 3:30 pm

Code: Select all

  1. Private Sub Command1_Click() ' Cách 1, Nho' Windows làm
  2. On Error Resume Next
  3. Set PathFolder = CreateObject("Shell.Application").BrowseForFolder(0, "Select a folder:", 0)
  4. TextBox1 = PathFolder.Self.Path
  5. End Sub
  6.  
  7. Private Sub Command2_Click() ' Cách 2, thuâ`n Code
  8. On Error Resume Next
  9. If TextBox2.Text = "" Then Exit Sub
  10. Set fso = CreateObject("Scripting.FileSystemObject")
  11.   Set f = fso.CreateFolder(TextBox2.Text)
  12. MsgBox "Ðã Xong!"
  13. MsgBox f.Path
  14. End Sub


Tao file và Folder tên Unicode.rar
download/file.php?id=4906
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

quygia128
Posts: 1
Joined: Tue 02/08/2011 4:41 pm
Has thanked: 1 time

Re: Lấy Danh sách Tập tin trong thư mục

Postby quygia128 » Sun 09/10/2011 1:06 am

Thấy anh Truong Phu làm cái này khá hay, tuyệt vời, nhưng khi đã làm cái này thì mục đích chính là kiểm tra xem trong folder đó có những file gì và bao gồm bao nhiêu file. Nhưng sao anh không bổ xung thêm đoạn code cho phép copy cái danh sách trong list đó vào Clipboard luôn thì hay quá vì đôi khi cần copy cái list thì có thể copy được.
Cảm ơn anh rất nhiều !

bvchauthanh
Posts: 7
Joined: Sat 21/11/2009 8:36 pm
Has thanked: 4 times

Re: Lấy Danh sách Tập tin trong thư mục

Postby bvchauthanh » Wed 23/11/2011 10:15 pm

Mấy pro cho mình hỏi 1 tí, nếu đường dẫn là tiếng Việt có dấu thì sao?
e làm thử rùi, bị báo lỗi "Run time error '52'"
Em muốn duyệt các tập tin trong thư mục được chỉ định và copy sang nơi khác (được chỉ định trước) nhưng khi có tập tin hoặc thư mục nào tên tiếng Việt có dấu là báo lỗi như trên.
Mong các pro giúp với ạ!
thanks 1000 lần

P/s: mình đang bí chổ này không biết làm gì dù thử nhiều cách khác rùi vẫn không được.
Có ai giúp em không ạ!

User avatar
doicanhden
Thành viên tích cực
Thành viên tích cực
Posts: 160
Joined: Wed 02/09/2009 4:29 pm
Location: Tp.HCM
Has thanked: 7 times
Been thanked: 3 times
Contact:

Re: Lấy Danh sách Tập tin trong thư mục

Postby doicanhden » Wed 23/11/2011 10:50 pm

Của bạn đây! Đây là hàm dung để tìm kiếm tập tin chấp nhận Unicode, bạn edit lại nhé. việc copy tập tin cũng phải xài api của win nếu muốn dùng unicode. hoặc đường dẫn shortpath để dùng trực tiếp hàm copy của vb6.
  1. Option Explicit
  2. Private Const FILE_ATTRIBUTE_DIRECTORY = &H10
  3. Private Const FILE_ATTRIBUTE_HIDDEN = &H2
  4. Private Const FILE_ATTRIBUTE_NORMAL = &H80
  5. Private Const FILE_ATTRIBUTE_READONLY = &H1
  6. Private Const FILE_ATTRIBUTE_SYSTEM = &H4
  7. Private Type FILETIME
  8.     dwLowDateTime As Long
  9.     dwHighDateTime As Long
  10. End Type
  11. Private Type WIN32_FIND_DATA
  12.     dwFileAttributes As Long
  13.     ftCreationTime As FILETIME
  14.     ftLastAccessTime As FILETIME
  15.     ftLastWriteTime As FILETIME
  16.     nFileSizeHigh As Long
  17.     nFileSizeLow As Long
  18.     dwReserved0 As Long
  19.     dwReserved1 As Long
  20.     cFileName As String * 255
  21.     cAlternate As String * 14
  22. End Type
  23. Public SearchResult$()
  24. Private Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileW" (ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As Long
  25. Private Declare Function FindNextFile Lib "kernel32" Alias "FindNextFileW" (ByVal hFindFile As Long, lpFindFileData As WIN32_FIND_DATA) As Long
  26. Private Declare Function FindClose Lib "kernel32" (ByVal hFindFile As Long) As Long
  27. Private Declare Function GetShortPathName Lib "kernel32.dll" Alias "GetShortPathNameW" (ByVal lpszLongPath As Long, ByVal lpszShortPath As Long, ByVal cchBuffer As Long) As Long
  28. Public Function WalkDir(ByVal sFolder$, ByVal StringToSearch$)
  29. On Local Error Resume Next
  30.     Dim myFolder As New Collection
  31.     Dim FileData As WIN32_FIND_DATA
  32.     Dim res As Long
  33.     Dim hSearch  As Long
  34.     Dim Filename As String
  35.         myFolder.Add (sFolder)
  36.         Do While (myFolder.Count)
  37.             sFolder = myFolder.Item(1)
  38.             myFolder.Remove (1)
  39.             hSearch = FindFirstFile(StrConv(sFolder & "\*.*", vbUnicode), FileData)
  40.             If hSearch = -1 Then GoTo Breaks
  41.             If InStr(sFolder, StringToSearch) > 0 Then
  42.                 ReDim Preserve SearchResult(n)
  43.                 SearchResult(n) = ShortPath(sFolder)
  44.                 n = n + 1
  45.             End If
  46.             Do
  47.                 Filename = TrimPath(FileData.cFileName)
  48.                 If (Filename <> ".") And (Filename <> "..") Then
  49.                     If (StringToSearch = "*.*") And (FileData.dwFileAttributes And FILE_ATTRIBUTE_DIRECTORY) Then
  50.                         ReDim Preserve SearchResult(n)
  51.                         SearchResult(n) = ShortPath(sFolder & "\" & Filename)
  52.                         n = n + 1
  53.                     Else
  54.                         If InStr(Filename, StringToSearch) > 0 Then
  55.                             ReDim Preserve SearchResult(n)
  56.                             SearchResult(n) = ShortPath(sFolder & "\" & Filename)
  57.                             n = n + 1
  58.                         End If
  59.                     End If
  60.                 End If
  61.                 res = FindNextFile(hSearch, FileData)
  62.             Loop Until Not (res <> 0)
  63. Breaks:
  64.             FindClose (hSearch)
  65.     Loop
  66. End Function
  67. Private Function TrimPath(sPath As String) As String
  68.     Dim i As Integer
  69.     sPath = StrConv(sPath, vbFromUnicode)
  70.     i = InStr(sPath, Chr(0))
  71.     If i > 0 Then sPath = Left(sPath, i - 1)
  72.     TrimPath = sPath
  73. End Function
  74. Private Function ShortPath(LongPath As String) As String
  75.     Dim l As Long, s As String
  76.     l = GetShortPathName(StrPtr(LongPath), 0, 0)
  77.     If l > 0 Then
  78.         s = Space(l - 1)
  79.         l = GetShortPathName(StrPtr(LongPath), StrPtr(s), l)
  80.     End If
  81.     ShortPath = s
  82. End Function
  83.  
  84.  


Return to “[VB] Hệ thống - Tập tin - Thư mục và Mạng”

Who is online

Users browsing this forum: No registered users and 1 guest