• 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

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

Gửi bàigửi bởi truongphu » T.Tư 26/03/2008 8:26 pm

Tên chương trình: Lấy Danh sách Tập tin trong thư mục
Ngôn ngữ lập trình: VB6/Script
Tác giả: itbasic & truongphu
Chức năng: Lấy Danh sách Tập tin trong thư mục


Nhóm Disk-File. Mong muốn thay thế bài cũ cùng tên trong Visual Basic Library

Mã: Chọn hết

  1. 'Tác gia: itbasic 6/05 Su dung Microsoft Scripting Runtime
  2.   'U'ng dung: truongphu 3/08
  3.  
  4.   'Môt ListBox thât to. Nho'khai báo MS Scripting Rutime
  5.     Dim MyFileSystem As New FileSystemObject
  6.     Dim MoreFolders As Folders
  7.     Dim TmpFolder As Folder
  8.     Dim MoreFiles As Files
  9.     Dim TmpFile As File
  10.    
  11. Private Sub MoveToSub(AFolder As Folder)
  12.     Set MoreFolders = AFolder.SubFolders
  13.       On Error Resume Next
  14.         For Each TmpFolder In MoreFolders
  15.           List1.AddItem TmpFolder.Path & "    (FOLDER)"
  16.             Set MoreFiles = TmpFolder.Files
  17.                 For Each TmpFile In MoreFiles
  18.                     List1.AddItem TmpFile.Path
  19.                 Next
  20.             MoveToSub TmpFolder
  21.         Next
  22. End Sub
  23.  
  24. Private Sub Form_Load()
  25. MoveToSub MyFileSystem.GetFolder("C:\WINDOWS")  'Máy yếu chạy lâu à nha
  26. End Sub


o0o--truongphu--o0o

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

vinhphuoc91
Thành viên tích cực
Thành viên tích cực
Bài viết: 146
Ngày tham gia: T.Tư 26/03/2008 5:52 pm
Đến từ: Phú Yên
Been thanked: 15 time
Liên hệ:

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

Gửi bàigửi bởi vinhphuoc91 » T.Tư 26/03/2008 8:36 pm

truongphu đã viết: 'Môt ListBox thât to. Nho'khai báo MS Scripting Rutime
Dim MyFileSystem As New FileSystemObject
Dim MoreFolders As Folders
Dim TmpFolder As Folder
Dim MoreFiles As Files
Dim TmpFile As File


"Nho'khai báo MS Scripting Rutime" bạn hướng dẫn mình được không, mình test nó không chạy đc
My website : http://tinthoitrang.net

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ư 26/03/2008 8:49 pm

Bạn khai báo như sau: xem hình

Hoặc gọn hơn, khỏi khai báo rắc rối, bạn thay câu:
Dim MyFileSystem As New FileSystemObject
bằng câu
Dim MyFileSystem

Sau đó trong Sub MoveToSub, bạn khai báo:
Set MyFileSystem = CreateObject("Scripting.FileSystemObject")
Tập tin đính kèm
untitled.jpg
o0o--truongphu--o0o

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

DungCoi
Thành viên năng nổ
Thành viên năng nổ
Bài viết: 77
Ngày tham gia: T.Tư 26/03/2008 9:24 pm
Been thanked: 2 time

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

Gửi bàigửi bởi DungCoi » T.Tư 26/03/2008 10:22 pm

theo em cách sử dụng hàm API đã giới thiệu lúc trước ổn hơn cả
Cách này lệ thuộc vào 1 control trung gian (Em nghĩ nó cũng phải sử dụng các API FindFirst , FindNext....) nên tốc độ có thể sẽ không bằng cách sài API này
~vb

luungoc2005
Thành viên năng nổ
Thành viên năng nổ
Bài viết: 62
Ngày tham gia: T.Ba 17/01/2006 9:43 am
Đến từ: Where Bill Gates beats the penguin just like the Batman
Liên hệ:

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

Gửi bàigửi bởi luungoc2005 » T.Tư 26/03/2008 11:06 pm

Có thể chỉ phải xài CreateObject("Scripting.FileSystemObject") . Xài ms scripting runtime nhỡ người ta không có scrrun.dll thì sao :D
A forum post should be like a skirt. Long enough to cover the subject material, but short enough to keep things interesting.

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ư 26/03/2008 11:24 pm

Đến DungCoi
Bạn DungCoi nhận xét đúng: cách sử dụng hàm API đã giới thiệu lúc trước chạy nhanh hơn với cùng thư mục C:\windows và file lọc là *.*
Tuy nhiên, không thể phủ nhận Code cũ dài lê thê, khai hàm API, các hằng, định nghĩa các loại biến... cứ rối tung lên, thật không hợp khả năng những bạn mới quen VB. Trong khi đó, Code VBScript trên tuy có chậm hơn nhưng bù lại code gọn hơn và nhất là dễ nắm bắt hơn
Thôi, tùy ý thích vậy.

Đến luungoc 2005
Dùng CreateObject "hình như" cũng dựa trên scrrun.dll , đây là thư viện có sẵn trên các HĐH từ 2000 trở lên, khác nhau chỉ là khai báo scrrun.dll trước thì được hổ trợ trong lúc viết code = đở lắm!
Không biết tôi nói thế có đúng không? Chẳng lẽ có máy (hiện giờ) không có scrrun.dll
;)
o0o--truongphu--o0o

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

Hình đại diện của người dùng
onlysoft
Thành viên tâm huyết
Thành viên tâm huyết
Bài viết: 330
Ngày tham gia: T.Tư 26/03/2008 6:32 pm
Đến từ: ONLYSOFT
Been thanked: 8 time

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

Gửi bàigửi bởi onlysoft » T.Năm 27/03/2008 7:43 am

Mỗi cách đều có một cái lợi riêng, Theo :D nly thì thích sữ dụng FileSystemObject hơn, nó tiện, nhưng khi làm mấy cái soft lớn thì thường dùng API :)
:x Tin học là cuộc sống, Lập trình là người yêu, Vợ là computer :x
Tôi yêu tin học, Tin học lập trình, Để lập trình tôi dùng VB, Tôi là B-)nly

Hình đại diện của người dùng
NoBi
Quản trị
Quản trị
Bài viết: 948
Ngày tham gia: T.Ba 18/03/2008 1:22 pm
Đến từ: Sài Gòn
Has thanked: 50 time
Been thanked: 66 time
Liên hệ:

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

Gửi bàigửi bởi NoBi » T.Năm 27/03/2008 9:32 am

Chạy chưa chính xác lắm. Mình test thử với 1 thư mục mà chỉ có tập tin trong đó, kg có thư mục con -> nó kg lấy được record nào.
:>

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 27/03/2008 10:48 am

Cảm ơn anh NoBi, tôi mới đọc VBS nên việc anh NoBi phát hiện điều thiếu sót trên cũng là bài toán.
Xin sửa lại code phần dưới như sau: bổ sung phần đọc file của thư mục cha

Mã: Chọn hết

  1. Private Sub Form_Load()
  2. Dim FileTam, File1, FileAll
  3.   Set FileTam = MyFileSystem.GetFolder("C:\Program Files\Windows NT")
  4.   Set FileAll = FileTam.Files
  5.     For Each File1 In FileAll
  6.         List1.AddItem File1.Name
  7.      Next
  8. MoveToSub MyFileSystem.GetFolder("C:\Program Files\Windows NT")
  9. Set MyFileSystem = Nothing
  10. 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.Năm 27/03/2008 4:11 pm

Bài trên là sửa tạm thiếu sót, và đây là bài mới, đã test trên nhiều thư mục

Mã: Chọn hết

  1. 'Không cân khai báo MS.S.R! Chép là chay. Cân 1 ListBox to. Không cân Option Explicit
  2. Function ShowFolderList(folderspec)
  3. 'Quà Tang Go'i Ðên NoBi 27/3/08
  4.   Dim MyFSO, NameFld, ffTmp, ffCollec
  5.   Set MyFSO = CreateObject("Scripting.FileSystemObject")
  6.   Set NameFld = MyFSO.GetFolder(folderspec)
  7.   Set ffCollec = NameFld.Files  'tìm file thu muc cha
  8.         For Each ffTmp In ffCollec
  9.             List1.AddItem ffTmp.Name 'vo'i ShowFolderList ffTmp bên duo'i
  10.         Next                    'se tìm luôn các file thu muc con
  11.                'fftmp.name thay vì fftmp.path Ðê gon và Ðep
  12.   Set ffCollec = NameFld.SubFolders
  13.   On Error Resume Next
  14.   For Each ffTmp In ffCollec   'tìm các thu muc con
  15.      List1.AddItem ffTmp.Path & "      Folder"
  16.      ShowFolderList ffTmp 'câu lênh nây là su' phu itbasic gio'i thiêu, _
  17.   goi là "Ðê quy" bàn vo'i su' phu NoBi 6/7/05
  18.   Next
  19.   Set MyFSO = Nothing 'Giai phóng tài nguyên
  20. End Function
  21.  
  22. Private Sub Form_Load()
  23. Dim ShowFF
  24. ShowFF = ShowFolderList( "C:\Program Files\Windows NT" )
  25. End Sub


19/3/0009 Ghi chú: Để hổ trợ duyệt file hay folder Unicode, bạn phải dùng ListBox1 của MS Form 2.0, Set Font nhóm Unicode
dòng 9 sửa lại là:

Mã: Chọn hết

  1. ListBox1.AddItem ffTmp.Name

dòng 15 cũng thế
Sửa lần cuối bởi truongphu vào ngày T.Năm 19/03/2009 6:15 pm với 3 lần sửa.
o0o--truongphu--o0o

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

luungoc2005
Thành viên năng nổ
Thành viên năng nổ
Bài viết: 62
Ngày tham gia: T.Ba 17/01/2006 9:43 am
Đến từ: Where Bill Gates beats the penguin just like the Batman
Liên hệ:

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

Gửi bàigửi bởi luungoc2005 » T.Năm 27/03/2008 4:34 pm

quái lạ, trước khi em cài VB thì máy ko có scrrun.dll . Lúc đó dùng WindowsScriptHost vẫn dùng FileSystemObject bình thường, không hiểu dùng cách createobject có cần scrrun.dll ko :D
A forum post should be like a skirt. Long enough to cover the subject material, but short enough to keep things interesting.

Movewho
Thành viên chính thức
Thành viên chính thức
Bài viết: 43
Ngày tham gia: T.Tư 26/03/2008 6:15 pm
Đến từ: Tiền giang
Has thanked: 2 time
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 Movewho » T.Hai 31/03/2008 9:33 am

Vậy làm sao để tìm chọn lọc từng file trong một folder nào đó với dòng code này ( ví dụ chỉ muốn tìm một file *.txt thôi mà không tìm các file khác
Không gì khó! Chỉ khó do không biết làm!
Web: http://kenhgiaitri.co.cc
Forum: http://phanmemviet.vnbb.com
Music:http://kenhgiaitri.co.cc/music
News:http://kgtnews.co.cc
Tv: http://kenhgiaitri.co.cc/tv

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 31/03/2008 11:27 am

Trong câu sau, khi đang duyệt các files:

Mã: Chọn hết

  1. For Each ffTmp In ffCollec
  2.               List1.AddItem ffTmp.Name
  3.    Next

Bạn hãy thêm bộ lọc file ở giữa:

Mã: Chọn hết

  1. For Each ffTmp In ffCollec
  2.           If UCase(Right(ffTmp.Name, 3)) = "TXT" Then
  3.                   List1.AddItem ffTmp.Name
  4.            End If
  5. Next
o0o--truongphu--o0o

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

Hình đại diện của người dùng
anhtuyenbk
Guru
Guru
Bài viết: 1311
Ngày tham gia: T.Năm 22/09/2005 4:12 pm
Đến từ: Một nơi chừa từng biết, chưa từng nghe, chưa từng thấy
Been thanked: 38 time

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

Gửi bàigửi bởi anhtuyenbk » T.Hai 31/03/2008 11:31 am

Cái thư viện scrrun.dll này thực ra cũng không tốt lắm. Lúc trước mình có xài, sử dụng trên máy mình thì được nhưng khi chạy trên máy khác nó báo khác phiên bản không xài được luôn (kể cả việc chép file scrrun.dll trong máy mình đem theo cũng ko ăn thua).
Kiếm cơm cho qua ngày tháng
https://www.facebook.com/pinduphongpisenchinhhang

Hình đại diện của người dùng
thuongem
Thành viên năng nổ
Thành viên năng nổ
Bài viết: 70
Ngày tham gia: T.Sáu 28/03/2008 1:31 am
Đến từ: Vĩnh Long
Has thanked: 2 time
Liên hệ:

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

Gửi bàigửi bởi thuongem » T.Bảy 05/04/2008 3:48 pm

Cảm ơn anh, code ngắn gọn, không dễ hiểu nhưng dễ làm , quá hay luôn :))
tôi thương chỉ mình em, em biết khô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.Năm 10/04/2008 9:10 am

Thêm phần đếm file và folder

Mã: Chọn hết

  1. Dim FileCount&, FolderCount&
  2. Function CountFF(folderspec)
  3.   On Error Resume Next
  4.   Dim MyFSO, NameFld, ffTmp, ffCollec
  5.   Set MyFSO = CreateObject("Scripting.FileSystemObject")
  6.   Set NameFld = MyFSO.GetFolder(folderspec)
  7.     Set ffCollec = NameFld.Files
  8.         For Each ffTmp In ffCollec
  9.           FileCount = FileCount + 1
  10.             'Làm tùy ý tai Ðây
  11.         Next
  12.     Set ffCollec = NameFld.SubFolders
  13.         For Each ffTmp In ffCollec
  14.            FolderCount = FolderCount + 1
  15.             'Làm tùy ý tai Ðây
  16.              CountFF ffTmp
  17.         Next
  18.   Set MyFSO = Nothing
  19. End Function
  20.  
  21. Private Sub Form_Load()
  22. Dim ShowFF
  23. ShowFF = CountFF("C:\Program Files\Internet Explorer")
  24. MsgBox FileCount & " Files  " & FolderCount & " Folders"
  25. End Sub
o0o--truongphu--o0o

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

btamsgn
Thành viên chính thức
Thành viên chính thức
Bài viết: 47
Ngày tham gia: T.Năm 10/04/2008 4:40 pm
Has thanked: 3 time

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

Gửi bàigửi bởi btamsgn » T.Tư 16/04/2008 10:31 am

Thanks!

truongphu đã viết:Thêm phần đếm file và folder

Mã: Chọn hết

  1. Dim FileCount&, FolderCount&
  2. Function CountFF(folderspec)
  3.   On Error Resume Next
  4.   Dim MyFSO, NameFld, ffTmp, ffCollec
  5.   Set MyFSO = CreateObject("Scripting.FileSystemObject")
  6.   Set NameFld = MyFSO.GetFolder(folderspec)
  7.     Set ffCollec = NameFld.Files
  8.         For Each ffTmp In ffCollec
  9.           FileCount = FileCount + 1
  10.             'Làm tùy ý tai Ðây
  11.         Next
  12.     Set ffCollec = NameFld.SubFolders
  13.         For Each ffTmp In ffCollec
  14.            FolderCount = FolderCount + 1
  15.             'Làm tùy ý tai Ðây
  16.              CountFF ffTmp
  17.         Next
  18.   Set MyFSO = Nothing
  19. End Function
  20.  
  21. Private Sub Form_Load()
  22. Dim ShowFF
  23. ShowFF = CountFF("C:\Program Files\Internet Explorer")
  24. MsgBox FileCount & " Files  " & FolderCount & " Folders"
  25. End Sub

Giang Hồ
Thành viên năng nổ
Thành viên năng nổ
Bài viết: 50
Ngày tham gia: T.Bảy 12/05/2007 2:36 pm
Đến từ: http://vn-soft.net
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 Giang Hồ » T.Bảy 10/05/2008 9:20 am

btamsgn đã viết:Thanks!

truongphu đã viết:Thêm phần đếm file và folder

Mã: Chọn hết

  1. Dim FileCount&, FolderCount&
  2. Function CountFF(folderspec)
  3.   On Error Resume Next
  4.   Dim MyFSO, NameFld, ffTmp, ffCollec
  5.   Set MyFSO = CreateObject("Scripting.FileSystemObject")
  6.   Set NameFld = MyFSO.GetFolder(folderspec)
  7.     Set ffCollec = NameFld.Files
  8.         For Each ffTmp In ffCollec
  9.           FileCount = FileCount + 1
  10.             'Làm tùy ý tai Ðây
  11.         Next
  12.     Set ffCollec = NameFld.SubFolders
  13.         For Each ffTmp In ffCollec
  14.            FolderCount = FolderCount + 1
  15.             'Làm tùy ý tai Ðây
  16.              CountFF ffTmp
  17.         Next
  18.   Set MyFSO = Nothing
  19. End Function
  20.  
  21. Private Sub Form_Load()
  22. Dim ShowFF
  23. ShowFF = CountFF("C:\Program Files\Internet Explorer")
  24. MsgBox FileCount & " Files  " & FolderCount & " Folders"
  25. End Sub


truongphu cho mình hỏi, có cách nào lọc file mà không cần đến cắt & xử lý chuổi không. vì nó sẽ rắc rối với các kí tự đại diện như *.* chẳng hạn. Nếu duyệt 1 lúc nhiều file mà phải xử lý chuổi nhiều vậy sẽ gây chậm quá trình
Code chỉ một lần mà fix bug thì mãi mãi
-----------------------------------
VnSecurity 2008 - Bảo vệ máy tính theo phong cách của bạn
Website: http://vn-soft.net

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.Bảy 10/05/2008 10:16 am

Có thể tôi chưa hiểu ý bạn Giang Hồ
- Đoạn code bạn trích không lọc file, gặp file là đếm, chạy nhanh
- Còn muốn lọc file thì bạn phải cho biết đuôi file chứ

Mã: Chọn hết

  1. If UCase(Right(ffTmp.Name, 3)) = "TXT" Then List1.AddItem ffTmp.Name
o0o--truongphu--o0o

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

Hình đại diện của người dùng
vietteiv
Quản trị
Quản trị
Bài viết: 1318
Ngày tham gia: T.Bảy 10/02/2007 12:17 am
Đến từ: Cung cấp giải pháp quản lý doanh nghiệp, dự án, tư vấn xây dựng
Has thanked: 6 time
Been thanked: 69 time
Liên hệ:

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

Gửi bàigửi bởi vietteiv » T.Tư 04/06/2008 12:47 pm

thanks bác truongphu. bài viết về đếm file trong folder khá hay. hiện tại cũng ứng dụng FSO trong chương trình để mã hóa dữ liệu sau khi backup.
chương trình không dùng listview để add file vào mà dùng control grid, nhưng phải biết trước tổng số file --> tương ứng với tổng số dòng cần add. nên phải chạy 2 lần đoạn lệnh để lấy số file và chạy lại 1 lần nữa để trả về thông số của file.

Mã: Chọn hết

  1. For Each ffTmp In ffCollec
  2. '
  3. Next

có cách nào khác không bác truongphu. chẳng hạn như NameFld.FileCount giống Recordset.RecordCount vậy đó ;;)


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.0 khách