• 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

Sử dụng Microsoft Scripting Runtime

Các bài viết hướng dẫn, giúp các bạn hiểu và tiếp cận với Visual Basic nhanh hơn
Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4762
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: 515 time

Giới thiệu thư viện scrrun.dll

Gửi bàigửi bởi truongphu » T.Ba 06/05/2008 8:38 pm

Tên bài viết: Giới thiệu thư viện scrrun.dll
Tác giả: truongphu
Cấp độ bài viết: Chưa đánh giá
Tóm tắt: Tự giới hạn VBScript, giới thiệu thư viện scrrun.dll


- Dưới góc nhìn CLB thì các bài viết về VBS sẽ tăng tính phong phú, đa dạng cho CLB, mà xét cho cùng VBS cũng là nhánh của ngôn ngữ VB. Trang chủ [url]microsoft.com[/url]vẫn dành một góc riêng cho VBS: The Scripting Center
- Tuy nhiên dưới góc nhìn của nhà lập trình chuyên nghiệp thì VBS hiện không được coi trọng vì tính chậm và kém ổn định, khó kiểm lỗi. Cũng vì lý do trên nên từ trước đến giờ, đa số các bài viết về VBS của tôi đều được giới hạn gởi vào Tip VB, xem như những thủ thuật nhỏ, mẹo vặt để giải guyết những tình huống đơn giản thật nhanh

HaiPT đã viết:Bác phú không nên lạm dụng WinScript , nó có rất nhiều hạn chế
+ Không tận dụng được chức năng gợi nhớ code của IDE
+ Chạy chậm hơn rất nhiều so với cách gọi thông thường , vì phải làm thêm bước tạo đối tượng script và nhờ đối tượng này run hộ, đồng thời cách truy xuất đối tượng cũng là liên kết muộn( late bound) ,các đối tượng chỉ đến lúc chạy mới biết được type làm chậm thêm khá nhiều và đồng thời gây khó khăn khi gỡ rối
+ Chỉ làm việc với kiểu variant rất dễ gây lỗi và khó dò lỗi khi thao tác với số lượng lớn mã lệnh
Có thể trong 1 số trường hợp dùng script đúng là tiện ích, nhỏ gọn..nhưng sẽ bị trả giá đắt về tốc độ thi hành , phát triển và bảo trì về sau...


Tôn trọng lời khuyên của BQT CLBVB

- Tôi sẽ giới hạn code VBS chỉ trong muc TipVB và viết ít lại
- Không viết tiếp các bài về Database (đã có Access), các bài về Word hay Excel trên nền VBS nữa, từ bỏ WMI, HTA

Trong nhóm VBS, phù hợp với VB nhất, đấy là Microsoft Scripting Runtime với việc Add thêm thư viện scrrun.dll. Nhờ đối tượng được khai báo sớm nên bạn có thể tận dụng khả năng gợi ý code của VisualBasic IDE, code vẫn chạy nhanh và ổn định. Bài viết "giả từ" VBS nầy sẽ khảo sát thư viện scrrun.dll mà các bạn có thể xem trực tiếp từ Object Browser sau khi Add scrrun.dll vào Project
Object chính của scrrun.dll là FileSystemObject, Các object phụ là dictionary object, Drive object, Drivers Collection, Folder object, folders collection và TextStream Object. Tôi chỉ giới thiệu FileSystemObject Object, File Object, Drive object, Folder object, TextStream object với tính cách liệt kê để các bạn tham khảo, không đi sâu vào code
1- Khai báo Object chính: bắt buộc cho mọi Object

Mã: Chọn hết

  1. Dim fso As New FileSystemObject

1a- Methods:
BuildPath Method
CopyFile Method
CopyFolder Method
CreateFolder Method
CreateTextFile Method
DeleteFile Method
DeleteFolder Method
DriveExists Method
FileExists Method
FolderExists Method
GetAbsolutePathName Method
GetBaseName Method
GetDrive Method
GetDriveName Method
GetExtensionName Method
GetFile Method
GetFileVersion Method
GetFileName Method
GetFolder Method
GetParentFolderName Method
GetSpecialFolder Method
GetStandardStream Method
GetTempName Method
MoveFile Method
MoveFolder Method
OpenTextFile Method
1b- Properties
Drives Property

2- Khai báo File Object:

Mã: Chọn hết

  1. Set f = fso.GetFile(filespec)

2a- Methods:
Copy Method
Delete Method
Move Method
OpenAsTextStream Method
2b- Properties
Attributes Property
DateCreated Property
DateLastAccessed Property
DateLastModified Property
Drive Property
Name Property
ParentFolder Property
Path Property
ShortName Property
ShortPath Property
Size Property
Type Property

3- khai báo Drive object

Mã: Chọn hết

  1. Set d =  fso.GetDrive(fso.GetDriveName(drvPath))

3a- Drive object không có methods
3b- Properties
AvailableSpace Property
DriveLetter Property
DriveType Property
FileSystem Property
FreeSpace Property
IsReady Property
Path Property
RootFolder Property
SerialNumber Property
ShareName Property
TotalSize Property
VolumeName Property

4- Khai báo Folder object

Mã: Chọn hết

  1. set f = fso.GetFolder(folderspec)

4a- Methods:
Copy Method
Delete Method
Move Method
CreateTextFile Method
4b- Properties
Attributes Property
DateCreated Property
DateLastAccessed Property
DateLastModified Property
Drive Property
Files Property
IsRootFolder Property
Name Property
ParentFolder Property
Path Property
ShortName Property
ShortPath Property
Size Property
SubFolders Property
Type Property

5- Khai báo TextStream object

Mã: Chọn hết

  1. Set myFile = fso.CreateTextFile("c:\testfile.txt", True)

5a- Methods:
Close Method
Read Method
ReadAll Method
ReadLine Method
Skip Method
SkipLine Method
Write Method
WriteBlankLines Method
WriteLine Method
5b- Properties
AtEndOfLine Property
AtEndOfStream Property
Column Property
Line Property
:D


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: 4762
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: 515 time

Re: Tự giới hạn VBScript

Gửi bàigửi bởi truongphu » T.Sáu 09/05/2008 3:55 pm

Sau đây là vài dòng code mẫu
Đối tượng là New FileSystemObject
Mthods: BuildPath Method
CopyFile Method
CopyFolder Method
CreateFolder Method
CreateTextFile Method
DeleteFile Method
DeleteFolder Method
DriveExists Method
FileExists Method
FolderExists Method
Các Object , Methods và Properties khác cũng tương tự
Nếu thư viện nầy được sử dụng quen, bảo đảm các thao tác trên đĩa, folder, file có code rất gọn và nhanh

Mã: Chọn hết

  1. Dim fso As New FileSystemObject, newpath$
  2. Private Sub Form_Load()
  3. newpath = fso.BuildPath("C:\", "VBS Folder")
  4. MsgBox newpath
  5. a = fso.CreateFolder(newpath)
  6. fso.CopyFile "c:\windows\*.ini", newpath
  7. fso.CopyFolder newpath, "D:\"
  8. fso.DeleteFile newpath & "\system.ini"
  9. fso.DeleteFolder newpath, True
  10. fso.DeleteFolder "D:\VBS Folder", True
  11. If fso.FileExists(newpath & "\system.ini") = True Then MsgBox "a!"
  12. If fso.FolderExists(newpath) = True Then MsgBox "a!"
  13. 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: 4762
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: 515 time

Sử dụng Microsoft Scripting Runtime

Gửi bàigửi bởi truongphu » CN 11/05/2008 7:33 pm

Tên bài viết:
Tác giả: gửi bởi itbasic vào ngày Chủ nhật 19/06/2005 4:54 pm
Cấp độ bài viết: Chưa đánh giá
Tóm tắt: Copy từ Diễn đàn cũ


Kể từ phiên bản Vb6, MS cung cấp cho ta một phương tiện hữu dụng để lập trình với các
đối tượng hệ thống tâp tin. Đó là thư viện scrrun.dll (Microsoft Scripting Runtime) , một thư viện đã được biên dịch với nhiều tính chất dược thiết lập sẵn (trong đó một số là đối tượng), và nhiều phương thức liên quan (Methode)

Ý tưởng cơ bản để làm việc với thư viện này là :
_Đầu tiên bạn cần tạo một đối tượng FileSystemObject mới.
_Khi đã có FileSystemObject mới, bạn sẽ nhận được một Collection “Drivers” báo cho bạn về các ổ đĩa trên máy của người dùng.
_Collection “Drives” có thể cung cấp collection “Folders” báo cho bạn về các hồ sơ trên ổ đĩa.
_Collection “Folders” có thể có collection “folders” khác bên trong cho các hồ sơ con và collection “Files” cho các tập tin trong hồ sơ đó.
Để đơn giản hoá điều này, chúng ta phân tích đoạn code sau :

Mã: Chọn hết

  1. Dim MyFilesSystem As NEW  FileSystemObject
  2. Dim Adrive As Drive
  3. For Each Adrive In MyFilesSystem.Drives
  4.   Me.Show
  5.   Print "Drive : " & Adrive.Path
  6. Next

Ta tạo ra một đối tượng hệ thống tập tin ở dòng thứ nhất với từ khoá NEW,
kế tiếp là biến đối tượng kiểu Drive. Từ chổ này biến Adrive chỉ quy chiếu đến các đối tượng là các Drive. Tính chất Drives của đối tượng MyFilesSystem cung cấp cho ta một tập hợp gồm các ổ đĩa trên máy tính của người dùng. Vòng For Each cho phép chúng ta lần lượt duyệt qua các phần tử là các ổ đĩa riêng rẻ trong Collection Drives đó.
Khi chúng ta đã có đối tượng Drive riêng rẻ rồi, ta sẽ sử dụng những Methode của đối tượng Drive để nhận được những thông tin ta cần, như các bạn có thể hình dung.
Nguồn: tham khảo từ sách (còn tiếp)

Hôm nay mình đưa tiếp một số điểm chính của thằng scrrun.dll này.
Các tính chất chính và thông dụng khi làm việc với đối tượng là Drive:
.AvaibleSpace
.DriveLetter
.DriveType
.FileSystem
.FreeSpace
.IsReady
.Path
.RootFolder
.SerialNumber
.ShareName
.TotalSize
.VolumName
Các bạn thấy không, những cái tên rất dễ nhớ và quen thuộc.
Và sau đây là một số phương pháp quan trọng nhất của FileSystemObject
CopyFile Source, destination [,overwrite]
CopyFolder source, destination [overwrite]
CreateFolder (foldername)
DeleteFile filespec [, force]
DeleteFolder folderspec [,force]
DriveExist (drivesspec)
FilesExits (filespec)
GetAbsolutePathName (pathspec)
GetBaseName (path)
GetDrive (drivespec)
GetDriveName (path)
GetExtensionName (path)
GetFile (filespec)
GetFolder (folderspec)
GetParentFolderName (folderspec)
GetSpecialFolder (folderspec)
GetTempName
MoveFile source, destination
MoveFolder source, destination

Vì mình chỉ tự học và chủ yếu là tham gia các Box về VB là chính nên trình độ và kiến thức về VB của mình còn yếu lắm. Nhưng theo mình thấy kể từ khi sử dụng thằng nầy cho nhu cầu thao tac với file, folder, drive thì thoải mái hơn nhiều lắm và lại it Bug nữa đấy. Các bạn thử xem.
Đoạn code sau đây cho phép bạn đi qua một Folder cho trước và tất cả những subFolder trong nó.

Mã: Chọn hết

  1. Dim MyFileSystem As new FileSystemOject
  2.     Dim MoreFolders As Folders
  3.     Dim tmpFolder As Folder
  4.    
  5. Private Sub MoveVeToSub (AFolder As Folder)
  6.     Set MoreFolders = AFolder.SubFolders
  7.       On Error Resume Next
  8.         For Each tmpFolder In MoreFolders
  9.            "muốn làm gì thì ở đây"
  10.            MoveToSub tmpFolder
  11.         Next
  12. End Sub
  13.  

Vì thủ tục MoveToSub nhận tham số là một biến đối tượng nên bạn truyền như sau

Mã: Chọn hết

  1. MoveToSub MyFileSystem.GetFolder (" ")

Nhìn code trên chắc các bạn cũng hiểu rùi, hay nhất là ở câu MoveToSub tmpFolder trong vòng For Each goi lại thường trình MoveTosub. Chính câu này cho phép ta đi qua hết tất cả thư mục con trong Folder. Người ta gọi là sự đệ quy.
ặc.. các bạn đừng quên câu On Error Resume Next nghe. Vì có khi sẽ có những Folder không được phép mở như là Volume System Information. Khi đó nó sẽ báo là Access Deny.
Nếu cảm thấy thích thú hoặc có thắc mắc gì chúng ta trao đổi tại dây nghe
Chúc các bạn vui. hì hì

gửi bởi NoBi vào ngày Thứ 4 06/07/2005 12:17 pm

Tui xin góp đoạn code minh họa cho cách sử dụng FileSystemObject.
Thêm vào trong Form 1 Combobox có tên : cboDrives ; 1 Label : Label1 ; 1 Listbox : List1 ; 1 Commandbutton : cmd_Find .
Chèn đoạn code bên dưới vào :

Mã: Chọn hết

  1. Option Explicit
  2. Dim FS As New FileSystemObject
  3. Dim sPath As String
  4. Private Const sSrchString = "*.mp3"
  5.  
  6. Private Sub cboDrives_Click()
  7.     If Left(cboDrives.text, InStr(cboDrives.text, ":")) <> "" Then sPath = Left(cboDrives.text, InStr(cboDrives.text, ":")) & "\" Else: sPath = cboDrives.text
  8. End Sub
  9.  
  10. Private Sub cmd_Find_Click()
  11. Dim nDirs As Integer, nFiles As Integer, i As Byte, lSize
  12. Dim sDir As String
  13.  
  14.     List1.Clear
  15.     MousePointer = vbHourglass
  16.  
  17.     If sPath = "All Drives" Then
  18.         For i = 1 To cboDrives.ListCount
  19.             cboDrives.ListIndex = i - 1
  20.             cboDrives_Click
  21.             sDir = sPath
  22.             lSize = FindFile(sDir, sSrchString, nDirs, nFiles)
  23.         Next i
  24.     Else
  25.         sDir = sPath
  26.         lSize = FindFile(sDir, sSrchString, nDirs, nFiles)
  27.     End If
  28.  
  29.     MousePointer = vbDefault
  30.     Label1.Caption = "Tìm thấy : " & Str(nFiles) & " tập tin trong " & Str(nDirs) & " thư mục"
  31.     'MsgBox "Tổng dung lượng = " & lSize & " bytes"
  32.  
  33. End Sub
  34.  
  35.  
  36. Private Sub Form_Load()
  37. Dim dDrive As Drive
  38. Dim dDrives As Drives
  39. On Error Resume Next
  40.  
  41.     Set dDrives = FS.Drives
  42.      
  43.     cboDrives.AddItem "All Drives"
  44.    
  45.     For Each dDrive In dDrives
  46.        If dDrive.IsReady = True Then
  47.           Select Case dDrive.DriveType
  48.              
  49.              Case 0    '/* Desconocido
  50.              Case 1    '/* Floppy Drive
  51.              Case 2    '/* Hard Drive
  52.                 cboDrives.AddItem dDrive.DriveLetter & ": [" & dDrive.VolumeName & "]"
  53.              Case 3    '/* Red
  54.              Case 4    '/* CDROM
  55.                cboDrives.AddItem dDrive.DriveLetter & ": [" & dDrive.VolumeName & "]"
  56.              Case 5    '/* RAM Disk
  57.           End Select
  58.        End If
  59.     Next
  60.  
  61. End Sub
  62.  
  63.  
  64. Private Function FindFile(ByVal sFol As String, sFile As String, _
  65. nDirs As Integer, nFiles As Integer)
  66. On Error Resume Next
  67. Dim fld As Folder, tFld As Folder, Filename As String
  68.  
  69.     Set fld = FS.GetFolder(sFol)
  70.     Filename = Dir(FS.BuildPath(fld.Path, sFile), vbNormal Or _
  71.     vbHidden Or vbSystem Or vbReadOnly)
  72.  
  73.     While Len(Filename) <> 0
  74.         FindFile = FindFile + FileLen(FS.BuildPath(fld.Path, Filename))
  75.         nFiles = nFiles + 1
  76.         List1.AddItem FS.BuildPath(fld.Path, Filename)    'Thêm vào list
  77.         Filename = Dir()    'Tìm tiếp ...
  78.         DoEvents
  79.     Wend
  80.  
  81.     Label1 = "Thư mục : " & vbCrLf & fld.Path & " ..."
  82.     nDirs = nDirs + 1
  83.  
  84.     If fld.SubFolders.Count > 0 Then
  85.         For Each tFld In fld.SubFolders
  86.             DoEvents
  87.             FindFile = FindFile + FindFile(tFld.Path, sFile, nDirs, nFiles)
  88.         Next
  89.     End If
  90.  
  91. End Function
  92.  

Chương trình trên sẽ tìm kiếm tất cả các tập tin .mp3 trong ổ đĩa mà bạn chọn. Bạn có thể thay tên ổ đĩa bằng một đường dẫn cụ thể nào đó. Chúc vui vẻ !!!.
Nhưng các bạn nhớ vô Project/ References/ chọn Microsoft Scripting Runtime để đăng ký sử dụng FileSystemObject

gửi bởi THE LAST LEAF vào ngày Thứ 5 07/07/2005 2:55 pm

Có cách khác mà không cần vào Project/...
Tuy cách này không tiện lắm nhưng thích hợp với bạn nào quen dùng
ví dụ

Mã: Chọn hết

  1. Dim FileObj
  2. Set FileObj = CreateObject("Scripting.FileSystemObject")


gửi bởi NoBi vào ngày Thứ 2 01/08/2005 11:58 am

Cách trên của THE LAST LEAF được gọi là liên kết muộn, dùng phương thức CreateObject để tạo FileSystemObject vào lúc thi hành. Còn cách khai báo sử dụng FileSystemObject trước như trên của mình gọi là liên kết sớm. Cả 2 cách đều hữu hiệu như nhau nhưng sử dụng cho mỗi trường hợp khác nhau:
Liên kết muộn được sử dụng cho Vbscript.
Còn nếu viết 1 ứng dụng trong môi trường VisualBasic IDE thì bạn nên dùng liên kết sớm vì nó cho phép VB tương tác với đối tượng. Việc này sẽ giúp phát triển tương tác như khả năng IntelliSense trong quá trình viết code và khả năng rà soát tập hợp và phương thức trong Object Browser. Nếu sử dụng liên kết muộn thì trước tiên bạn phải tạo FileSystemObject thông qua phương thức CreateObject như sau:

Mã: Chọn hết

  1. Dim fs As Object
  2. Set fs = CreateObject(“Scripting.FileSystemObject”)


Tạo xong FileSystemObject, bạn có thể khai thác tập hợp đối tượng và phương thức trong FileSystemObject (nhưng sẽ không được hổ trợ IntelliSense trong lúc viết code, bạn phải tự nhớ). Sau khi xong xuôi, bạn nên ấn định đối tượng ở Nothing nhằm đảm bảo giải phóng tài nguyên hệ thống dành cho đối tượng:

Mã: Chọn hết

  1. Fs = Nothing
o0o--truongphu--o0o

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

Hình đại diện của người dùng
clarkkent
Mạnh Thường Quân
Mạnh Thường Quân
Bài viết: 1641
Ngày tham gia: T.Tư 16/04/2008 11:25 am
Đến từ: Chợ Lách - Bến Tre
Been thanked: 31 time
Liên hệ:

Re: Sử dụng Microsoft Scripting Runtime

Gửi bàigửi bởi clarkkent » T.Bảy 11/07/2009 9:39 am

1 Module ví dụ về FileSystemObject
Tập tin đính kèm
FSO.zip
FileSystemObject
(16.6 KiB) Đã tải 468 lần
• Hôm bây: www.tinsoftware.com ^ ^
Cố gắng lên...

nhokstart
Thành viên chính thức
Thành viên chính thức
Bài viết: 38
Ngày tham gia: T.Tư 13/04/2011 9:42 am
Has thanked: 1 time
Been thanked: 2 time
Liên hệ:

Re:da thua anh Truongphu

Gửi bàigửi bởi nhokstart » T.Năm 14/04/2011 10:12 pm

a viết e hiểu hết mà sao e đưa vào máy báo lỗi hoài....
Private Sub Text3_Click()
Dim kt
Set kt = CreateObject("Scripting.FileSystemObject")
kt.copyfolder "d:\dfdd", "d:\vb"
End Sub

em muon copy "d:\vb " sang "d:\dfdd" ?
..... đoạn mã trên anh xem dum em.... thanks


Quay về “[VB] Bài viết hướng dẫn”

Đ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