Xử lý tập tin
Cung cấp cho ứng dụng khả năng tạo, thay đổi, di chuyển, xoá các thư mục, dò tìm xem chúng có tồn tại hay không, nếu có thì ở đâu. Nó cũng cho phép lấy các thông tin về thư mục như tên, ngày tạo, ngày sửa đổi gần nhất... Mô hình FSO ...
Cung cấp cho ứng dụng khả năng tạo, thay đổi, di chuyển, xoá các thư mục, dò tìm xem chúng có tồn tại hay không, nếu có thì ở đâu. Nó cũng cho phép lấy các thông tin về thư mục như tên, ngày tạo, ngày sửa đổi gần nhất...
Mô hình FSO chưa trong thư viện kịch bản (Scripting type library- csrrun.dll), hỗ
trợ tạo và thao tác với tập tin văn bản thông qua đối tượng TextStream. Nó chưa hỗ trợ tập tin nhị phân, ta phải dùng lệnh Open với cờ Binary.
Mô hình này chứa các đối tượng sau:
Đối tượng | Giải thích |
Drive | Cho phép thu thập thông tin về ổ đĩa như dung lượng, tên chiasẻ... Lưu ý rằng không nhất thiết là ổ cứng. Nó có thể là CD- ROM, là ổ đĩa RAM, hoặc là ổ mạng. |
Folder | Cho phép tạo, xóa, di chuyển thư mục hay thu thập các thôngtin hệ thống như tên thư mục, đường dẫn... |
Files | Cho phép tạo, xoá, di chuyển tập tin hay thu thập các thông tinhệ thống.... |
FileSystemObject | Các thuộc tính và phương thức cho phép tạo xóa, thu thậpthông tin về ổ đĩa, thư mục, tập tin. |
TextStream | Cho phép đọc và ghi văn bản |
Nếu chưa có sẵn tham chiếu đến FSO bạn có thể reference đến nó từ menu Project eference...
Mặc dù có FSO, các lệnh cổ điển vẫn được hỗ trợ đầy đủ trong Visual basic. Nếu ta thiết kế ứng dụng để làm việc với cơ sở dữ liệu, ta sẽ không cần cung cấp các truy cập đến tập tin. Điều khiển dữ liệu và ràng buộc dữ liệu cho phép đọc và ghi dữ liệu trực tiếp trên cơ sở dữ liệu, dễ dàng hơn truy cập đến tập tin.
Các kiểu truy cập tập tin
Tập tin là một dãy các byte lưu trên đĩa. Khi ứng dụng truy cập đến tập tin, nó xem các byte như là ký tự, bản ghi,số, chuỗi...Có 3 kiểu truy cập tập tin:
- Tuần tự:đọc và ghi các tập tin văn bản theo cá chuỗi liên tục.
- Ngẫu nhiên:đọc và ghi tập tin văn bản hoặc nhị phân có cấu trúc theo các bản ghi có chiều dài xác định
- Nhị phân:đọc và ghi các tập tin có cấu trúc không xác định.
Hàm truy cập tập tin
H à m/ d ò ng lệnh | T u ầ n tự | Ngẫu nhiên | N hị p hân |
Close | X | X | X |
Get | X | X | |
Input() | X | X | |
Input # | X | ||
Line Input # | X | ||
Open | X | X | X |
Print # | X | ||
Put | X | X | |
Type.. End type | X | ||
Write # | X |
Tập tin tuần tự
Mở tập tin tuần tự
Open pathnameFor|Input | Output |Append |Asfilenumber | Len =buffersize| Khi mở một tập tin tuần tự với Input,tập tin phải có sẵn. Nếu không Visual basic sẽ báo lỗi. Khi ta mở một tập tin chưa có sẵn với Outputhoặc Appendlệnh Open sẽ tạo mới tập tin và mở nó.
Tham số tuỳ chọn Len chỉ ra số ký tự trong vùng đệm khi sao chép dữ liệu giữa tập tin và chương trình.
Sau khi mở tập tin với Input, Output hoặc Append ta phải đóng nó bằng lệnh Close.
Soạn thảo tập tin
Trước hết, đọc nội dung tập tin vào biến, sửa biến và ghi biến vào tập tin.
Đọc chuỗi từ tập tin
Mở tập tin với Input. Sau đó, dùng dòng lệnh line Input #, Input() hoặc Input # để sao chép nội dung tập tin vào biến. Visual basic cung cấp những hàm để đọc ghi 1 ký tự hoặc một dòng vào tập tin. Đoạn code sau đọc từng dòng: Dim LinesFromFile, NextLine As String
Do Until EOF(FileNum) Line Input #FileNum, NextLine LinesFromFile = LinesFromFile + NextLine + Chr(13) + Chr(10) Loop
Mặc dù Line Input# nhận ra cuối chuỗi khi nó đọc đến ký tự xuống dòng, nhưng nó không lấy ký tự này khi đưa và biến. Nếu muốn lấy ký tự xuống dòng ta phải tự xử lý code.
Ta cũng có thể dùng Input # để đọc một danh sách gồm các số hay chuỗi trong tập tin. Ví dụ, để đọc một dòng trong tập tin danh sách thư điện tử:
Input #filename, name, street, city,state,zip
Dùng Input để sao chép một số ký tự từ tập tin vào biến: LinesFromFile = Input(n, Filename)
Để copy toàn bộ tập tin vào biến, dùng InputB để copy từng byte. Vì InputB trả về chuỗi ANSI, ta phải dùng StrConv để chuyển đổi từ ANSI sang UNICODE.
LinesFromFile= StrConv(InputB(LOF(FileNum), FileNum), vbUnicode)
Ghi chuỗi và tập tin
Để ghi nội dung biến vào tập tin, mở tập tin với Output hay Append, sau đó dùng Print #. Ví dụ, tình soạn thảo văn bản copy nội dung của hộp văn bản vào tập tin: Print #FileNum, Thebox.text
Visual basic cũng hỗ trợ lệnh Write #, dùng để ghi một danh sách các số, chuỗi vào tập tin. Dấu phẩy được dùng để tách biệt:
Dim strString as String, intNumber as Integer strString = “AnyCharacters” intNumber = 23456 Write #Filenum, strString, intNumber
Đoạn code này ghi một chuỗi và một số vào một tập tin được chỉ ra bởi FileNum.
Tập tin ngẫu nhiên
Mô hình FSO không hỗ trợ tập tin ngẫu nhiên. Các byte trong tập tin truy cập ngẫu nhiên có dạng bản ghi đồng nhất, mỗi bản ghi chứa một hoặc nhiều trường. Mỗi trường có kiểu và kích thước xác định. Mỗi bản ghi có nhiều trường tương đương kiểu người dùng định nghĩa. Ví dụ: Kiểu worker tạo mẫu tin 19 bytes gồm 3 trường:
Type worker LastName As String *10 Tilte As String * 7 Rank As String *2 End Type
Sau khi định nghĩa kiểu mẫu tin, khai báo các biến mà ứng dụng cần để xử lý 1 tập tin mở để truy cập ngẫu nhiên: Public Employee as worker
Mở tập tin ngẫu nhiên
Open pathname [ For Random ] As filenumber Len = reclength
Vì Random là kiểu mặc định từ khoá Forrandomlà tuỳ chọn.
Biểu thức Len=reclengthchỉ ra kích thước tính bằng byte của một bản ghi. Lưu ý rằng mỗi biển chuỗi trong Visual basic chứa một chuỗi Unicode và ta phải chỉ ra chiều dài tính bằng byte của chuỗi đó. Nếu reclengthnhỏ hơn chiều dài thực sự của bản ghi ghi đến tập tin, lỗi sé sinh ra. Nếu reclengthlớn hơn chiều dài thực sự của bản ghi, bản ghi sẽ được ghi, mặc dù một số khoảng trống đĩa bị lãng phí.
Tập tin truy cập nhị phân
Trong mô hình FSO không hỗ trợ tập tin này. Dùng tập tin nhị phân khi yêu cầu kích thước tập tin nhỏ. Khi thao tác nên dùng biến byte thay vì String, vì dữ liệu nhị phân không thể chứa đúng vào biến String.
Mở tập tin nhị phân
Cú pháp lệnh:
Open pathname For Binary As filenumber
Chứa thông tin trong các trường hợp có độ dài thay đổi
Ta có thể giảm thiểu việc sử dụng khoảng trống đĩa bằng tập tin nhị phân.
Type Person ID As Integer MonthlySalary As Currency LastReviewDate As Long FirstName As String LastName As String Tilte As String End Type Public Empl As Person
Mỗi bản ghi chỉ chứa một số byte cần thiết do các trường có chiều dài biến đổi. Trở ngại là ta không thể truy cập bản ghi một cách ngẫu nhiên, mà ta phải truy cập
tuần tự theo độ dài của mỗi bản ghi. ta có thể tìm một byte trong tập tin, ngưng không thể biết byte đó thuộc bản ghi nào.
- Hộp danh sách ổ đĩa
- Hộp danh sách thư mục
- Hộp danh sách tập tin
Điều khiển hệ thống tập tin lấy thông tin tự động từ hệ điều hành, ta có thể truy cập hoặc quyết định nên hiển thị những phần nào thông qua các thuộc tính của chúng.
Hộp danh sách ổ đĩa
Là hộp danh sách kiểu drop down ổ đĩa. Mặc định là ổ đĩa hiện hành được hiển thị trên hệ thống của người sử dụng. khi điều khiển có forcus, NSD có thể gx vào một tên ổ đĩa hợp lệ hoặc nhấn chuột để chọn một ổ đĩa trong danh sách các ổ đĩa. Nếu Người sử dụng chọn một ổ đĩa mới tên mới sẽ hiện thị nên đầu danh sách.
Ta có thể dùng code để quy định ổ đĩa được chọn. Drive1.Drive = “C:”
Chọn một ổ đĩa không làm thay đổi ổ điãc hiện hành, trừ phi ta lấy thuộc tính Drive gán cho hàm ChDrive
ChDrive = Drive1.Drive
Hộp danh sách thư mục
Hộp danh sách thư mục hiển thị cấu trúc thư mục của ổ đĩa hiện hành trên hệ thống, bắt đầu bằng thư mục gốc. Cấu trúc thể hiện hình cây phân nhánh. Thư mục hiện hành trở thành đậm và thụt vào so với thư mục cha và cứ thế thụt vào cho đến thư mục gốc. Khi người sử dụng di chuyển chuột lên xuống, mỗi thư mục trở thành đậm.
Xác định từng thư mục
Mỗi thư mục trong hộp có một số hiệu kèm theo. Khả năng này không được hỗ trợ trong hộp thoại thông dụng. Thư mục chỉ ra bởi thuộc tính Path (Dir1.Path) luôn có listIndex là -1. Thư mục ngay sát bên trên nó có listIndex là -2, kế tiếp là -3....đến gốc. Thư mục con đầu tiên của Dir1.Path có listIndex là 0. Nếu có nhiều thư mục con ở mức này thì kế tiếp nó có ListIndex là 1, tiếp theo là 2...
Định thư mục hiện hành
Dùng thuộc tính Path của hộp danh sách thư mục để xem hoặc quy đinh thư mục hiện hành (ListIndex =-1). Ví dụ gán “C:Luong” vào Drive1.Path thì Luong là thư mục hiện hành.
Tương tự, ta có thể gán thuộc tính Path của hộp danh sách thư mục là thuộc tính Drive của hộp danh sách ổ đĩa.
Dir1.Path = Drive1.Drive
Khi đó, hộp danh sách thư mục hiện thị tất cả thư mục ở trên, và các thư mục ngay ngay mục hiện hành của ổ. Tuy nhiên nó không quy định thư mục hiện hành ở mức hệ điều hành, nó chỉ làm nổi bật và cho nó giá trị ListIndex = -1.
Để định thư mục hiện hành dùng lệnh ChDir.
ChDir Dir1.Path
Trong một ứng dụng dùng các điều khiển tập tin, ta có thể định thư mục hiện hành là thư mục chứa tập tin EXE thông qua đối tượng Application: ChDrive App.Path
ChDir App.Path
Chú ý thuộc tính Path chỉ có thể được sử dụng trong lúc chạy chương tình không có sẵn vào lúc thiết kế.
Nhấn chuột vào một thành phần trong Hộp danh sách thư mục
Khi nhấn chuột vào một thành phần thì nó trở thành đậm. Khi ngườ sử dụng nhấn đúp chuột lên đó, nó được gán xào thuộc tính Path, và ListIndex được đổi thành -1. Hộp danh sách thư mục được đổi lại để hiện thị các thư mục con.
Tìm vị trí tương đối của thư mục
Thuộc tính ListCount trả về số thư mục bên dưới thư mục hiện hành, không phải tổng số thành phần trong hộp danh sách thư mục.
Hộp danh sách tập tin
Liệt kê các tập tin chứa trong thư mục chỉ ra bởi thuộc tính Path. Ta cũng có thể hiển thị các tập tin trong thư mục hiện hành trên ổ đĩa hiện hành:
File1.Path = Dir1.Path
Ta có thể hiển thị các tập tin thông qua điều kiện lọc dùng thuộc tính Pattern Ví
dụ:
File1.Pattern = "*.frm; *.bas"
Visual basic hỗ trợ ký tự “?” VD: “???.txt” hiển thị tất cả các tậpt in có phần mở
rộng là “.txt”
Làm việc ví thuộc tính của tập tin
Thuộc tính bao gồm: Archive, Normal, System, Hidden và ReadOnly. Ta có thể dùng thuộc tính để chỉ ra loại tập tin nào sẽ được hiển thị trong danh sách. Bởi mặc định, giá trị của các thuộc tính System và Hidden là False; Normal, Archive và ReadOnly là True.
Để hiển thị chỉ những tập tin ReadOnly chỉ cần đổi thuộc tính này là true và các thuộc tính khác là False
Cho phép Người sử dụng nhập văn bản và thực hiện một số thao tác định dạng giống như nạp, ghi dữ liệu trong một trình soạn thảo văn bản.
Ta cũng có thể đánh dấu đoạn văn bản, chuyển thành ký tự đậm, nghiêng...ta cũngcó thể canh trái, canh phải các đoạn văn bản.
Điều khiển cho phép mở và ghi tập tin dước dạng rtf và ascci thông qua hàm loadfile và Savefile.
Để dùng điều khiển RichTextBox ta thêm tập tin Richtx32.ocx và đề án. khi chạy ứng dụng cài tập tin này trong thư mục system của windows.
Phương thức loadfile
Cú pháp: Object.LoadFile pathname, filetype
Pathnamelà đường dẫn đến tập tin
fileType:Tuỳ chọn, là hằng số thể hiện kiểu tập tin:
Hằng | Giá trị | Gi ả i thích |
rtfRTF | 0 | (Mặc định) RTF, tập tin lưu phải là tập tin.rtf hợp lệ |
rtfText | 1 | Văn bản, điều khiển đang lưu tệp văn bản. |
Khi nạp một tập tin dùng LoadFile, toàn bộ nội dung của điều khiển được thay thế bằng nội dung tập tin. Điều này làm giá trị của thuộc tính Text và rftText thay đổi
Ta cũng có thể dùng hàm Input và thuộc tính TxtRTF và selRTF để đọc tập tin.rtf ví dụ, ta có thể đọc nội dung tập tin vào điểu khiển như sau: Open “Mytext.rtf” For Input As 1
RichTextBox2.TextRTF = strconv(InputB$(LOF(1),1), vbUniCode)
Lưu nội dung của điều khiển RichTextbox vào tập tin Cú pháp: Object.SaveFile( pathname,filetype) Pathnamelà đường dẫn đến tập tin
fileType:Tuỳ chọn, là hằng số thể hiện kiểu tập tin:
Hằng | Giá trị | Gi ả i thích |
rtfRTF | 0 | (Mặc định) RTF, tập tin lưu phải là tập tin.rtf hợp lệ |
rtfText | 1 | Văn bản, điều khiển đang lưu tệp văn bản. |
Ta cũng có thể dùng hàm Write và thuộc tính TextRTF và SelRTF để ghi vào tập tin.rtf. Ta cũng có thể lưu nội dung được đánh dấu trong điều khiển vào tập tin.rtf: Open “Mytext.rtf” For Output As 1
Print #1,RichTextBox2.SelRTF