FileSystemObject-Completed

Trạng thái
Không mở trả lời sau này.

tuhocvba

Administrator
Thành viên BQT
FSO là viết tắt của FileSystemObject, FSO là 1 công cụ mạnh chuyên dùng để xử lý các vấn đề liên quan đến Drive, Folders và Files.
Khởi tạo: Muốn sử dụng FSO thì không thể thiếu đoạn code dưới đây trong chương trình:
Mã:
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Thuộc tính:
Drives : Nó cho biết máy tính chạy macro đang có những ổ đĩa nào.
Mã:
Sub test1()
    ''Hien thi toan bo o dia tren may tinh
    Dim FSO As Object, Drv As Variant, buf As String
    Set FSO = CreateObject("Scripting.FileSystemObject")
    For Each Drv In FSO.Drives
        buf = buf & Drv.DriveLetter & vbCrLf
    Next Drv
    MsgBox buf & "Dang duoc ket noi"
    Set FSO = Nothing
End Sub
Kết quả:
Bạn cần đăng nhập để thấy hình ảnh


kết quả này phù hợp với thực tế:
Bạn cần đăng nhập để thấy hình ảnh


Phương thức:
BuildPath :
Nó sẽ tạo ra đường dẫn theo như chỉ định. Thực tế thư mục mới hay file mới không được tạo ra.
Để hiểu rõ hơn, hãy xem ví dụ dưới đây.
Mã:
Sub test2()
    'Tao ra duong dan du co \ hay khong co \
    Dim FSO As Object, buf As String
    Const sourceFilePath As String = "C:\Temp"  '<-- Khong co \
    Const targetFilePath As String = "C:\Temp\" '<-- Co dau \
    Const fileName As String = "Results.txt"
    
    Set FSO = CreateObject("Scripting.FileSystemObject")
    
    Debug.Print FSO.BuildPath(sourceFilePath, fileName)
    Debug.Print FSO.BuildPath(targetFilePath, fileName)
  
    Set FSO = Nothing
  
  
End Sub
Bạn cần đăng nhập để thấy hình ảnh


CopyFile : Cấu trúc code là:
Mã:
FileSystemObject.CopyFile source, destination[, overwrite]
Nó sẽ copy file từ tham số source và paste vào đường dẫn theo tham số destination.
Tuy nhiên nếu file ở source không tồn tại thì sẽ phát sinh lỗi.
Nếu chúng ta chỉ định nguồn là:
Mã:
C:\Tmp\*.xlsx
Nó sẽ copy toàn bộ file xlsx trong đường dẫn nói trên nhưng nếu đường dẫn thiếu minh bạch như sau thì sẽ xảy ra lỗi.
Mã:
C:\Tmp\*\Book1.xlsx
Đối với nơi chứa file được copy là tham số destination, nếu như trong này đã có file trùng tên, bên cạnh đó nếu như ta chỉ định tham số overwrite là True, thì việc ghi đè sẽ diễn ra, nếu để là False thì sẽ phát sinh lỗi nếu trong này đã tồn tại file trùng tên.
Nếu ta giản lược tham số Overwrite, máy tính sẽ mặc định hiểu tham số này là True.
Tham số destination nhất định phải kết thúc là dấu "\" , nếu không sẽ báo lỗi. Hoặc tham số destination là đường dẫn không hề tồn tại, cũng sẽ phát sinh lỗi.
Mã:
Sub test3()
    Dim FSO As Object
    Set FSO = CreateObject("Scripting.FileSystemObject")
    'Copy file tu D:\chungcu.xlsx va paste vao D:\CODE\
    FSO.CopyFile "D:\chungcu.xlsx", "D:\CODE\"
    'Copy file chungcu.xlsx va paste vao D\CODE\ dong thoi doi ten file la chungcu2.xlsx
    FSO.CopyFile "D:\chungcu.xlsx", "D:\CODE\chungcu2.xlsx"
    Set FSO = Nothing
End Sub
Nguồn:
 

tuhocvba

Administrator
Thành viên BQT
CopyFolder: Cấu trúc code là
Mã:
FileSystemObject.CopyFolder source, destination[, overwrite]
Tham số source, đó là thư mục chúng ta chỉ định để copy cất vào nơi có tham số destination. Phương thức này cũng giống với phương thức copy file.
Mã:
Sub test4()
    Dim FSO As Object
    Set FSO = CreateObject("Scripting.FileSystemObject")
    '' Copy thư mục Sub trong đường dẫn C:\Tmp\  và cho vào thư mục C:\Work\
    FSO.CopyFolder "C:\Tmp\Sub", "C:\Work\"
    Set FSO = Nothing
End Sub
CreateFolder: Cấu trúc code là:
Mã:
FileSystemObject.CreateFolder(foldername)
Nó sẽ tạo ra một folder mới.
Tham số foldername, chính là đường dẫn chúng ta chỉ định để tạo folder. Nếu đường dẫn đó đang tồn tại, hay nói cách khác là folder đó đang tồn tại rồi mà chúng ta lại tạo folder mới cùng đường dẫn thì sẽ xảy ra lỗi (folder trùng lặp). Do đó, chúng ta cần kiểm tra sự tồn tại của folder mà chúng ta có ý định tạo, nếu đang tồn tại thì dừng quá trình tạo mới.
Mã:
Sub test5()
    ''Tạo folder Sub trong đường dẫn C:\Work\
    Dim FSO As Object
    Set FSO = CreateObject("Scripting.FileSystemObject")
    FSO.CreateFolder "C:\Work\Sub"
    Set FSO = Nothing
End Sub
Phương thức CreateFolder hễ mà thành công trong việc tạo ra folder theo đường dẫn đã chỉ định, thì giá trị trả về sẽ là string, chính là link của folder mà nó đã tạo. Ngoài ra, cần chú ý, nếu folder đang tồn tại, hoặc chúng ta chỉ định tạo folder có tên không chính xác(chứa các ký tự đặc biệt) theo qui định của hệ điều hành thì sẽ xảy ra lỗi nhưng là lỗi gì, thì chúng ta có thể phán đoán dựa vào thuộc tính Number của đối tượng Err đã phát sinh khi xảy ra lỗi. Đoạn code tiếp theo tôi muốn giới thiệu, nó sẽ tạo ra thư mục con trong thư mục C:\Work theo chỉ thị cuản gười dùng sau khi nhập đường dẫn vào inputbox. Nó sẽ hiển thị đường dẫn folder nếu thành công, trong trường hợp thất bại, nó sẽ chỉ ra nội dung lỗi.
Mã:
Sub test5_2()
    ''Tạo ra thư mục theo tên mà người dùng chỉ định, nằm bên trong C:\Work\
    Dim FSO As Object, buf As String, Result As String
    buf = InputBox("Hay nhap ten folder ma ban muon tao ra nam ben trong C:\Work")
    If buf = "" Then Exit Sub
    Set FSO = CreateObject("Scripting.FileSystemObject")
    On Error Resume Next
    Result = FSO.CreateFolder("C:\Work\" & buf)
    Set FSO = Nothing
    If Err = 0 Then
        MsgBox "Chuong trinh da tao ra" & vbCrLf &Result , vbInformation
    Else
        MsgBox Err.Description, vbExclamation
    End If
    Set FSO = Nothing
End Sub
Bạn cần đăng nhập để thấy hình ảnh
 

Euler

Administrator
Thành viên BQT
CreateTextFile: Tạo ra một file text. Ứng dụng: tạo ra file bất kỳ như là .c, .can, ...
Cấu trúc code:
Mã:
FileSystemObject.CreateTextFile(filename[, overwrite[, unicode]])
Nó sẽ tạo ra file có tên theo như chỉ định, giá trị trả về đối tượng TextStream. //Diễn đàn sẽ dịch về TextStream sau. Tạm thời bạn không cần quan tâm.
Tham số filename là chúng ta chỉ định tạo ra file có tên theo tham số này.
Tham số overwrite có thể giản lược. Có nghĩa là nếu có file trùng tên đã tồn tại trước đó, nếu tham số này giá trị là True, thì sẽ cho phép ghi đè. Khi giản lược không đả động gì, giá trị mặc định của tham số này được máy tính hiểu là True.
Tham số unicode có thể giản lược. Nếu chỉ định giá trị của tham số này là True thì nó sẽ tạo file với mã Unicode . Nếu giá trị chỉ định là False thì nó sẽ tạo ra file với mã ASCII. Khi giản lược không viết gì, máy tính hiểu mặc định là False.
Chúng ta hãy nhớ lại thao tác bằng tay khi tạo file txt. Lúc chúng ta save as thì có cửa sổ sau hiện ra:
Bạn cần đăng nhập để thấy hình ảnh

Nếu tham số overwrite chỉ định là False, trong khi đó file trùng tên tồn tại, thì việc tạo file không thể thực thi được. Chương trình sẽ bị lỗi.
Khi thực thi phương thức CreateTextFile, ngay lập tức file text có size là 0 sẽ được tạo ra (chưa cần biết nội dung là gì).
Mã:
Sub test6()
    ''Tạo ra file Sample.txt cất trong đường dẫn D:\VB\ , nội dung file là ghi thông tin ngày tháng hiện tại
    Dim FSO As Object
    Set FSO = CreateObject("Scripting.FileSystemObject")
    With FSO.CreateTextFile("D:\VB\Sample.txt")
        .WriteLine Now
        .Close
    End With
    Set FSO = Nothing
End Sub
Kết quả:
Bạn cần đăng nhập để thấy hình ảnh

Lưu ý là với đoạn code trên, file Sample.txt đã được tạo ra, tôi đang mở file để đọc. Cùng lúc ấy tôi sửa lại:
Mã:
.WriteLine "website: tuhocvba.net"
và chạy code. Tôi đóng file txt ở trên và mở lại, thì nội dung mới đã được cập nhật vào file. Có nghĩa là chương trình trên đã thực hiện ghi đè, ngay cả khi file đang bị mở. Không có mạng Lan để kiểm chứng xem nếu người khác đang mở mà mình chạy code thì sẽ như thế nào.

DeleteFile: Xóa file.
Cấu trúc code:
Mã:
FileSystemObject.DeleteFile filespec[, force]
Tham số filespec là chỉ định xóa file nào.
Nếu file chỉ định không tồn tại, việc thực thi lệnh sẽ xảy ra lỗi. Để kiểm tra file tồn tại hay không, ta sử dụng phương thức FileExists, tuy nhiên phương thức này sẽ giới thiệu sau ở các bài dịch sau.
Tham số force có thể giản lược. Tham số này nếu là True, thì dù file đang được mở bởi ai đó, thì nó cũng sẽ bị xóa. Khi giản lược, thì mặc định máy tính hiểu tham số này là False.
Mã:
Sub test7()
    ''Xóa file D:\VB\Sample.txt
    Dim FSO As Object
    Set FSO = CreateObject("Scripting.FileSystemObject")
    FSO.DeleteFile "D:\VB\Sample.txt"
    Set FSO = Nothing
End Sub
Trước khi chạy chương trình này, tôi thử mở file txt ở trên, và chạy code. Tôi đóng file txt. Vào thư mục kiểm tra, file txt không còn nữa. Quả là lợi hại.
tuhocvba update ngày 28/7/2019: Chú ý để là False, hay True thì file vẫn bị xóa dù file đang mở, bạn đọc kiểm chứng lại.
Mã:
 FSO.DeleteFile "D:\VB\Sample.txt", True
hay
Mã:
 FSO.DeleteFile "D:\VB\Sample.txt", False
Link nguồn:
Option:
Đối với người dùng việt nam thì rất hay quan tâm tới UTF-8, vì vậy mình có tìm hiểu thêm.
Để đọc một file với mã code UTF-8, bạn dùng code dưới đây nhé:

Mã:
Dim objStream, strData
Set objStream = CreateObject("ADODB.Stream")
objStream.CharSet = "utf-8"
objStream.Open
objStream.LoadFromFile("C:\Users\admin\Desktop\test.txt")
strData = objStream.ReadText()
Để viết một file với mã UTF-8, các bạn sử dụng code sau:
Mã:
Dim objStream
Set objStream = CreateObject("ADODB.Stream")
objStream.CharSet = "utf-8"
objStream.Open
objStream.WriteText "The data I want in utf-8"
objStream.SaveToFile "C:\Users\admin\Desktop\test.txt", 2
Tạm thời giải quyết vấn đề trước mắt đã, có điều kiện thời gian, chúng ta sẽ tìm hiểu sâu hơn nhé.
Nguồn tham khảo:
 

tuhocvba

Administrator
Thành viên BQT
DeleteFolder: Xóa thư mục
Cấu trúc code:
Mã:
FileSystemObject.DeleteFolder folderspec[, force]
Folder được chỉ định sẽ bị xóa cùng tất cả những gì bên trong nó.
Tham số folderspec là đường dẫn folder chỉ định sẽ bị xóa. Nếu folder này không tồn tại thì sẽ xảy ra lỗi. Vì vậy hãy dùng phương thức FolderExists để kiểm tra folder mà các bạn muốn xóa có tồn tại hay không. Phương thức này diễn đàn sẽ giới thiệu sau.
Tham số force có thể giản lược. Nếu tham số này thiết định là False thì file nằm trong folder đang được mở cũng sẽ bị xóa. Khi giản lược thì máy tính mặc định tham số này là False.
Phương thức DeleteFolder, đầu tiên nó sẽ xóa toàn bộ file bên trong folder, sau đó nó sẽ xóa folder. Trong trường hợp nếu các bạn chỉ định tham số force là True, trong đó một file trong folder đang được mở hoặc được đọc bởi chương trình khác, thì sẽ phát sinh lỗi. Chú ý, cũng có khả năng trước khi phát sinh lỗi, các file không được đọc sẽ bị xóa trước. Nếu folder chỉ định xóa không thực sự tồn tại thì sẽ phát sinh lỗi, mã lỗi là 76.
Bạn cần đăng nhập để thấy hình ảnh

Trường hợp trong folder đó có file đang được đọc hay đang được mở ra, và force được thiết định là True, thì mã lỗi là 70.
Bạn cần đăng nhập để thấy hình ảnh

Chúng ta có thể sử dụng thuộc tính Attributes của đối tượng file để kiểm tra điều này. (Về điều này, diễn đàn sẽ giới thiệu sau, tạm thời bạn chưa cần quan tâm).
Mã:
Sub test8()
    ''Xóa thư mục và toàn bộ file bên trong C:\Work\
    Dim FSO As Object
    Set FSO = CreateObject("Scripting.FileSystemObject")
    FSO.DeleteFolder "C:\Work", False
    Set FSO = Nothing
End Sub
Chú ý: Bài dịch trên đã sửa lại so với bài dịch gôc.
Nguyên bản bài dịch gốc, chúng tôi hiểu là :force = True, thì dù file trong folder đang được mở cũng sẽ bị xóa. Nếu force = False thì file đang mở sẽ sinh ra lỗi.
Tuy nhiên quá trình kiểm nghiệm đã cho kết quả ngược lại, do đó chúng tôi đã sửa lại nội dung bài dịch ở phần này. Các bạn có thể tự kiểm chứng lại.

Link nguồn:

DriveExists: Kiểm tra ổ đĩa có tồn tại hay không?
Cấu trúc code:
Mã:
FileSystemObject.DriveExists(drivespec)
Kiểm tra ổ đĩa mà các bạn chỉ định kiểm tra, có tồn tại hay không? Nếu tồn tại thì giá trị trả về là True.
Tham số drivespec là tên ổ đĩa các bạn chỉ định kiểm tra.
Trường hợp các bạn sử dụng ổ FD hay CD-ROM, dù bên trong chưa chứa đĩa CD thì giá trị trả về vẫn là True. Để kiểm tra bên trong đã chuẩn bị đĩa CD bên trong hay chưa thì các bạn sử dụng thuộc tính IsReady của đối tượng Drive để kiểm tra. (Về điều này, diễn đàn sẽ giới thiệu sau, tạm thời bạn chưa cần quan tâm).
Mã:
Sub test9()
    ''Kiểm tra ổ đĩa E có tồn tại hay không?
    Dim FSO As Object
    Set FSO = CreateObject("Scripting.FileSystemObject")
    If FSO.DriveExists("E") Then
        MsgBox "O dia E ton tai"
    Else
        MsgBox "O dia E khong ton tai"
    End If
    Set FSO = Nothing
End Sub
Kết quả:
Bạn cần đăng nhập để thấy hình ảnh
 

Euler

Administrator
Thành viên BQT
FileExists: Kiểm tra file tồn tại hay chưa?
Cú pháp code:
Mã:
FileSystemObject.FileExists(filespec)
Giá trị trả về là True nếu file tồn tại.
Tham số filespec là đường link file mà bạn muốn kiểm tra sự tồn tại.
Mã:
Sub test10()
    ''Kiểm tra file này tồn tại không? C:\Work\Sample.txt
    Dim FSO As Object, Target As String
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Target = "C:\Work\Sample.txt"
    If FSO.FileExists(Target) Then
        MsgBox Target & "Ton tai"
    Else
        MsgBox Target & "Khong ton tai"
    End If
    Set FSO = Nothing
End Sub
FolderExists: Kiểm tra folder tồn tại hay chưa?
Cú pháp code:
Mã:
FileSystemObject.FolderExists(folderspec)
Giá trị trả về là True nếu thư mục tồn tại.
Tham số folderspec là đường dẫn folder mà bạn muốn kiểm tra. Bạn cũng có thể chỉ định đường dẫn tương đối như thế này:
「.」là chỉ thư mục hiện tại chứa file macro thực thi chương trình này.
「..」là chỉ ổ đĩa hiện tại chứa file macro thực thi chương trình này.
Ví dụ, file macro đang ở thư mục「C:\Work\Job」, như thế thì「.\Sub」sẽ là「C:\Work\Job\Sub」và 「..\Sub」sẽ là「C:\Work\Sub」.
Mã:
Sub test11()
    ''Kiểm tra thư mục VB tồn tại hay không
    Dim FSO As Object
    Set FSO = CreateObject("Scripting.FileSystemObject")
    If FSO.FolderExists("..\VB") Then
        MsgBox "Sub ton tai
    Else
        MsgBox "Sub khong ton tai"
    End If
    Set FSO = Nothing
End Sub
Kết quả:
Bạn cần đăng nhập để thấy hình ảnh

Tôi thử thay thế code trên bằng:
Mã:
 If FSO.FolderExists(".\VB") Then
Kết quả sẽ là không tìm thấy, do trong thư mục iện tại chứa file macro, không có thư mục nào tên là VB.
Tôi sửa lại đoạn code trên thay bằng:
Mã:
If FSO.FolderExists(".\ConsoleApp1") Then
Kết quả là tìm thấy, vì nó tìm trong thư mục chứa file macro và phát hiện thư mục ConsoleApp1 tồn tại:
Bạn cần đăng nhập để thấy hình ảnh
 

giaiphapvba

Administrator
Thành viên BQT
GetAbsolutePathName: Trả về đường link, chú ý thư mục mới không được tạo ra.
Cấu trúc code:
Mã:
FileSystemObject.GetAbsolutePathName(pathspec)
Đường dẫn không được ghi đầy đủ, đi qua nó sẽ trả về giá trị đầy đủ của đường link.
Tham số pathspec là đường link đã bị giản lược. Chú ý không phân biệt / hay \
Hãy xem ví dụ sau, file macro tôi để trong một thư mục bất kỳ trên ổ D:
Mã:
Sub test12()
    Dim FSO As Object
    Set FSO = CreateObject("Scripting.FileSystemObject")
    ''Đường link nhập vào là đường link được viết dưới dạng giản lược.
    ''Kết quả sẽ cho ra: D:\
    MsgBox FSO.GetAbsolutePathName("../..")
    ''Kết quả sẽ cho ra D:\
    MsgBox FSO.GetAbsolutePathName("\")
    ''Kết quả sẽ cho ra D:\Report
    MsgBox FSO.GetAbsolutePathName("..\..\Report")
    Set FSO = Nothing
End Sub
GetBaseName: Lấy tên file, không quan tâm phần mở rộng.
Cấu trúc code:
Mã:
FileSystemObject.GetBaseName(path)
path là đường link của file, kết quả trả về là tên file nhưng chú ý không có phần mở rộng. Ví dụ: Book1, chứ không phải là Book1.xlsm
Nếu quan tâm tới phần mở rộng, thì dùng GetExtensionName:
Mã:
FileSystemObject.GetExtensionName(path)
Mã:
Sub test13()
    Dim FSO As Object
    Set FSO = CreateObject("Scripting.FileSystemObject")
    ''Ket qua se tra ve la: Book1
    MsgBox FSO.GetBaseName("D:\thuchanh\Book1.xlsm")
    Set FSO = Nothing
End Sub
GetDrive: Lấy tên ổ đĩa
Cấu trúc code
Mã:
FileSystemObject.GetDrive drivespec
Tham số drivespec là tên ổ đĩa, có các cách viết như sau: 「C」「C:」「C:\」
Dưới đây là một code ví dụ, sử dụng phương thức GetDrive để lấy đối tượng Drive và cất vào biến Drv。Ở hàm MsgBox sẽ tham chiếu tới thuộc tính DriveLetter của đối tượng Drive. Thực ra, một cách chính thống thì có tính năng MsgBox Drv vì thuộc tính mặc định của đối tượng DriveDriveLetter. Chú ý phương thức GetDrive sẽ trả về giá trị là 「C」, đây không phải là string (kí tự văn bản), mà đây là đối tượng ổ đĩa C, hãy chú ý.
Mã:
Sub test14()
    Dim FSO As Object, Drv As Object
    Set FSO = CreateObject("Scripting.FileSystemObject")
    ''Gia tri tra ve la : C
    Set Drv = FSO.GetDrive("C:\")
    MsgBox Drv.DriveLetter
    Set Drv = Nothing
    Set FSO = Nothing
End Sub
Tôi thử sửa code trên thành:
Mã:
MsgBox Drv
Kết quả là: C:
Phần này giống nội dung đã trình bày ở bài viết đầu tiên:
 

vbano1

SMod
Thành viên BQT
GetDriveName: Lấy tên ổ đĩa. Giá trị trả về là tên ổ đĩa (string)
Cấu trúc code:
Mã:
FileSystemObject.GetDriveName(path)
Tham số path là đường link có chữa tên ổ đĩa ở đầu. Nó sẽ không quan tâm thực tế đường link này có tồn tại hay không, đầu vào là chuỗi ký tự đường link, và kết quả trả về là tên ổ đĩa có trong đường link đó. Ví dụ: Nếu ta chỉ định đường link「G:\tanaka\toru」nó sẽ trả về kết quả là G:.
Thuộc tính DriveLetter của đối tượng Drive sẽ cho kết quả là C, còn GetDriveName sẽ trả về kết quả có dấu hai chấm C:. Hãy chú ý.
Mã:
Sub test15()
    Dim FSO As Object
    Set FSO = CreateObject("Scripting.FileSystemObject")
    ''Gia tri tra ve la  D:
    MsgBox FSO.GetDriveName("D:\tanaka\toru")
    Set FSO = Nothing
End Sub
GetExtensionName: Lấy phần mở rộng của file
Cấu trúc code:
Mã:
FileSystemObject.GetExtensionName(path)
Tham số path là đường link của file. Chú ý: file tồn tại hay không cũng không quan tâm. Nó coi đây là chuỗi string và tách ra lấy phần mở rộng sau dấm chấm "." mà thôi.
Mã:
Sub test16()
    Dim FSO As Object
    Set FSO = CreateObject("Scripting.FileSystemObject")
    ''Giá trị trả về là : xls
    MsgBox FSO.GetExtensionName("C:\Work\Book1.xlsx")
    Set FSO = Nothing
End Sub
Nếu chúng ta thay đổi thành:
Mã:
D:\VB\macrdfsfsdoxlsm
Tức là đường link chúng ta không có phần mở rộng, cố tình nhập sai, giá trị trả về là rỗng "".
Nếu quan tâm tới tên file thì hãy nhớ lại GetBaseName:
 

tuhocvba

Administrator
Thành viên BQT
GetFile:
Cấu trúc:
Mã:
FileSystemObject.GetFile(đường_dẫn_file)
Giá trị trả về là .
Ví dụ:
Mã:
Sub test17()
    Dim FSO As Object, FileObject As Object
    Set FSO = CreateObject("Scripting.FileSystemObject")
    ''Sẽ cho biết file C:\Book1.xlsx có kích cỡ như thế nào
    Set FileObject = FSO.GetFile("C:\Book1.xlsx")
    MsgBox FileObject.Size
    Set FileObject = Nothing
    Set FSO = Nothing
End Sub
GetFileName: Trả về tên của file
Cấu trúc:
Mã:
FileSystemObject.GetFileName(đường_dẫn_file)
Dù file không tồn tại thì cũng không sao, nó chỉ dựa vào đường dẫn và tự tính ra tên file bao gồm cả phần mở rộng của file.
Mã:
Sub test18()
    Dim FSO As Object
    Set FSO = CreateObject("Scripting.FileSystemObject")
    ''Output: Book1.xlsx
    MsgBox FSO.GetFileName("C:\Work\Book1.xlsx")
    Set FSO = Nothing
End Sub
 

giaiphapvba

Administrator
Thành viên BQT
GetFolder: Trả về .
Cấu trúc:
Mã:
FileSystemObject.GetFolder(folderspec)
Ví dụ dưới đây sẽ chỉ ra số folder con trong folder được chỉ định.
Mã:
Sub test19()
    Dim FSO As Object, FolderObject As Object
    Set FSO = CreateObject("Scripting.FileSystemObject")
    ''Trong thư mục C:\Work\ có bao nhiêu thư mục con?
    Set FolderObject = FSO.GetFolder("C:\Work\")
    MsgBox FolderObject.SubFolders.Count
    Set FolderObject = Nothing
    Set FSO = Nothing
End Sub
GetParentFolderName : Trả về tên thư mục mẹ của thư mục được chỉ định
Cấu trúc:
Mã:
FileSystemObject.GetParentFolderName(path)
Đường dẫn thư mục không tồn tại thì cũng không sao hết.
Ví dụ nếu bạn chỉ định 「G:\tanaka\toru\」 , đây là thư mục không hề có thật, tuy nhiên nó vẫn trả về giá trị là 「G:\tanaka」 .
Ví dụ:
Mã:
Sub test20()
    Dim FSO As Object
    Set FSO = CreateObject("Scripting.FileSystemObject")
    ''Sẽ trả về giá trị là C:\Work
    MsgBox FSO.GetParentFolderName("C:\Work\Sub\")
    Set FSO = Nothing
End Sub
 

tuhocvba

Administrator
Thành viên BQT
GetTempName : Tạo ra tên file ngẫu nhiên
Nó sẽ tạo ra tên file ngẫu nhiên nhất thời, phần mở rộng là tmp.
Ví dụ:
Mã:
Sub test22()
    Dim FSO As Object
    Set FSO = CreateObject("Scripting.FileSystemObject")
    ''Tạo tên file ngẫu nhiên
    MsgBox FSO.GetTempName
    Set FSO = Nothing
End Sub
GetSpecialFolder : Nó sẽ trả về được thiết định đặc định cho hệ thống.
Chú ý phải thiết định Microsoft Scripting Runtime .
Bạn cần đăng nhập để thấy đính kèm

Ví dụ:
Mã:
Sub test21()
    Dim FSO As Object, FolderObject As Object
    Set FSO = CreateObject("Scripting.FileSystemObject")
    ''Hien thi so luong file trong thu muc Windows
    Set FolderObject = FSO.GetSpecialFolder(0)
    MsgBox FolderObject.Files.Count
    Set FolderObject = Nothing
    Set FSO = Nothing
End Sub
Nguồn:
 

giaiphapvba

Administrator
Thành viên BQT
MoveFile: Di chuyển file
Cấu trúc: FileSystemObject.MoveFile source, destination
source là đường link file do chúng ta chỉ định. Dù file ở chế độ chỉ được đọc thì nó vẫn bị di chuyển.
destination là nơi di chuyển đến. Nếu trong này chứa file trùng tên đã tồn tại thì sẽ phát sinh lỗi.
Mã:
Sub test23()
    Dim FSO As Object
    Set FSO = CreateObject("Scripting.FileSystemObject")
    ''Di chuyển file trong thư mục có phần mở rộng là xlsx
    '' tới thư mục C:\Work\
    FSO.MoveFile "C:\Tmp\*.xlsx", "C:\Work\"
    Set FSO = Nothing
End Sub
MoveFolder: Di chuyển folder
Cấu trúc: FileSystemObject.MoveFolder source, destination
source là đường link folder do chúng ta chỉ định.
destination là nơi di chuyển đến.
Mã:
Sub test24()
    Dim FSO As Object
    Set FSO = CreateObject("Scripting.FileSystemObject")
    ''Di chuyển thư mục C:\
    FSO.MoveFolder "C:\Tmp\Sub", "C:\Work\"
    Set FSO = Nothing
End Sub
 

tuhocvba

Administrator
Thành viên BQT
OpenTextFile : Là phương thức mở file text
Cấu trúc: FileSystemObject.OpenTextFile(filename[, iomode[, create[, format]]])
File text sẽ được mở, giá trị trả về dưới dạng .
  • filename : Là đường dẫn file mà chúng ta chỉ định để mở file đó lên.
  • iomode : Là tham số có thể giản lược. Chế độ mở chỉ đọc sẽ là 1. Chế độ mở cho phép ghi cập nhật nội dung là 2. Khi giản lược, máy tính sẽ mặc định tham số này là 1-chế độ mở chỉ đọc.
  • create : Là tham số có thể giản lược. filename là file chưa tồn tại, chúng ta sẽ tạo mới file, thì giá trị của tham số này là True. Nếu không phải là tạo mới file thì tham số này là False, đây cũng là giá trị mặc định nếu tham số này không được chỉ định rõ ràng.
  • format : Là tham số có thể giản lược. Đây là tham số chỉ định hình thức mở file. Nếu giản lược, nó sẽ mặc định mở file ở chế độ ASCII.
Giá trịHình thức
0​
Mở file ở chế độ ASCII
-1​
Mở file ở chế độ Unicode
-2​
Mở file ở chế độ mặc định của hệ thống
Ví dụ:
Mã:
Sub test25()
    Dim FSO As Object, TextFile As Object, buf As String
    Set FSO = CreateObject("Scripting.FileSystemObject")
    ''Mở file C:\Work\Sample.txt và hiển thị nội dung
    Set TextFile = FSO.OpenTextFile("C:\Work\Sample.txt")
    buf = TextFile.ReadAll
    MsgBox buf
    Set TextFile = Nothing
    Set FSO = Nothing
End Sub
Nguồn dịch và tham khảo:
 
Trạng thái
Không mở trả lời sau này.
Top