Tin học - Chương 11: Quản lý hệ thống file

pdf 17 trang vanle 2470
Bạn đang xem tài liệu "Tin học - Chương 11: Quản lý hệ thống file", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdftin_hoc_chuong_11_quan_ly_he_thong_file.pdf

Nội dung text: Tin học - Chương 11: Quản lý hệ thống file

  1. MÔN TIN HỌC Chương 11 QUẢN LÝ HỆ THỐNG FILE 11.1 Tổng quát về truy xuất file trong VB 11.2 Qui trình điển hình để truy xuất Binary file 11.3 Qui trình điển hình để truy xuất Random file 11.4 Qui trình điển hình để truy xuất Sequential file 11.5 Các hàm truy xuất thuộc tính file 11.6 Các lệnh xử lý thư mục Môn : Tin học Khoa Công nghệ Thông tin Chương 11 : Quảnlýhệ thống file Trường ĐH Bách Khoa Tp.HCM Slide 289 Tổng quát về thờigiansống củabiếndữ liệu ‰ Chương trình xử lý dữ liệu thông qua các biếndữ liệu. Như ta đãbiết, mỗibiếndữ liệuchỉ có đờisống ngắnngủi: hoặcbằng đờisống của1 thủ tục, hoặcbằng đờisống của 1 module (hay đốitượng) hoặc cao nhất là bằng thờigianchạy ứng dụng, từ lúc ứng dụng đượcnạpvàobộ nhớ trong đếnlúcchương trình kết thúc thựcthi. ‰ Để lưugiữ giá trị của1 số biếnhầutraođổidữ liệugiữa2 ứng dụng khác nhau hay giữa2 lầnchạy khác nhau của cùng 1 ứng dụng, ta sẽ ghi giá trị các biến này ra môi trường chứatin bềnvững trên những đơnvị chứa tin độclập đượcgọilàfile. ‰ Trong chương 2, chúng ta đã trình bày các khái niệmvề file, cách tổ chức đĩacứng thành cây phân cấp các file cũng như cácthaotácquảnlý hệ thống file trựctiếpbởingười dùng. ‰ Trong chương này ta sẽ nghiên cứu chi tiếtcácphương tiệnmàVB cung cấp để thựchiện các thao tác quảnlýhệ thống file, đặcbiệtlàviệctruy xuấtnội dung của file, từ trong code của ứng dụng VB. Môn : Tin học Khoa Công nghệ Thông tin Chương 11 : Quảnlýhệ thống file Trường ĐH Bách Khoa Tp.HCM Slide 290 145
  2. Cấutrúcfile ‰ Ở cấp độ HĐH, file là danh sách gồm n byte chưacóngữ nghĩa. ‰ Chính ứng dụng phảitự qui định cấutrúccụ thể của file mình tạo ra/đọclạivàngữ nghĩacủatừng đơnvị cấu trúc này. ‰ VB cung cấpchoứng dụng 3 dạng file khác nhau, ứng vớimỗi dạng file có 1 cách thứctruyxuấtdữ liệutương ứng : ƒ file tuầntự (Sequential File) hay file vănbản là danh sách gồmn byte, mỗi byte là 1 ký tự ANSI. Thí dụ file source code của các class VB *.bas. ƒ file nhị phân (Binary File) là danh sách gồm n byte nhị phân chưacó cấu trúc. Thí dụ file Word, file Excel, file khả thi - executable. ƒ file truy xuấttrựctiếp (Random File) là danh sách gồm n record có cùng độ dài, mỗi record chứa nhiều field thông tin. Thí dụ file chứa các hồ sơ sinh viên. Môn : Tin học Khoa Công nghệ Thông tin Chương 11 : Quảnlýhệ thống file Trường ĐH Bách Khoa Tp.HCM Slide 291 Tổng quát về quảnlýhệ thống file trong VB ‰ VB cung cấp cho ngườilập trình 2 phương pháp khác nhau để quảnlý hệ thống file : ƒ gọi các thủ tụctruyềnthống như Open, Close, Input, Write, Get, Put Ta có thể gọi các thủ tục này là các lệnh VB. ƒ dùng mô hình đốitượng FSO (File System Object). Vớiphương pháp này, đầutiênngườilậptrìnhsẽ tạorađốitượng FileSystemObject rồimỗikhicầnquảnlýhệ thống file, họ chỉ cầngọi method tương ứng của đốitượng trên. ‰ MặcdùFSO làphương pháp hướng đốitượng, rất thân thiệnvàdễ dùng, nhưng hiệnFSO chưa đủ mạnh, chỉ cho phép truy xuất file text -vănbản, chứ chưa cho phép truy xuất2 dạng file Binary và Random. Do đó trong chương này chúng ta chỉ tập trung giớithiệuphương pháp dùng các thủ tụctruyềnthống để truy xuất file. Sau này khi có điềukiện, mỗi SV sẽ tự nghiên cứu thêm cách dùng mô hình FSO. Môn : Tin học Khoa Công nghệ Thông tin Chương 11 : Quảnlýhệ thống file Trường ĐH Bách Khoa Tp.HCM Slide 292 146
  3. 11.1 Tổng quát về truy xuất file trong VB ‰ Qui trình truy xuất 1 file trong VB gồm3 bước chính : ƒ mở/tạo file (gọithủ tục Open) : khai báo cho hệ thống biếttasắpsửa truy xuất 1 file đượcxácđịnh bởi đường dẫncụ thể cùng các chếđộ truy xuất file cụ thể. ƒ lặptruyxuất file thông qua việcgọicácthủ tục Input, Get, Write, Put, Thường mỗithủ tụctrênchỉ truy xuất1 đơnvị thông tin nhỏ của file nên ta phảilặp nhiềulần đếnkhihết file, tuy nhiên ta có quyền đọc/ghi toàn bộ nội dung file vào/ra bộ nhớ. ƒ đóng file (gọithủ tục Close) : khai báo cho hệ thống biết ta không còn muốntruyxuất file nữa để hệ thống cấm không cho bấtkỳ lệnh nào trong ứng dụng củatatruyxuất file nữa. ‰ Để giúp các bạndễ dàng tiếp thu thông tin, chúng tôi sẽ trình bày qui trình truy xuất file chi tiếttrêntừng loạifile cụ thể : Text file, Random file và Binary File. Môn : Tin học Khoa Công nghệ Thông tin Chương 11 : Quảnlýhệ thống file Trường ĐH Bách Khoa Tp.HCM Slide 293 Bảng các lệnh VB truy xuấtfile Tên phát biểu Sequential File Random File Binary File Open x x x Close x x x Input # x Line Input # x Print # x Write # x Input () x x Type EndType x Put x x Get x x Môn : Tin học Khoa Công nghệ Thông tin Chương 11 : Quảnlýhệ thống file Trường ĐH Bách Khoa Tp.HCM Slide 294 147
  4. Bảng các function truy xuấtfile ‰ Dir : duyệt các phầntử trong 1 thư mục ‰ FileCopy : nhân bản vô tính 1 file thành file mới ‰ FileDateTime : đọc/hiệuchỉnh ngày/giờ hiệuchỉnh file lầncuối ‰ FileLen : xác định độ dài file chưamở ‰ FreeFile : xác định chỉ số file còn trống để có thể dùng an toàn ‰ Loc : xác định vị trí truy xuấthiện hành trong file ‰ LOF : xác định độ dài file đãmở ‰ Seek : xác định/thiếtlậpvị trí truy xuất file ‰ GetAttr : đọcthuộc tính file ‰ SetAttr : ghi thuộc tính file Môn : Tin học Khoa Công nghệ Thông tin Chương 11 : Quảnlýhệ thống file Trường ĐH Bách Khoa Tp.HCM Slide 295 11.2 Qui trình điểnhìnhđể truy xuất Binary file ‰ Cú pháp lệnh open file nhị phân như sau : Open pathname For Binary As filenumber ‰ Nếuchưabiếtcấutrúcdữ liệucủa file, nên dùng biến dãy các byte để đọc/ghi dữ liệutừ/ra file nhị phân. Nếu đãbiếtcấutrúcdữ liệucủa file, nên khai báo kiểudữ liệumiêutả cấutrúcđórồi khai báo biếncókiểu vừa định nghĩa để chứa thông tin đọctừ file vào. ‰ Dùng lệnh Seek [#]filenumber, position để dời pointer đọc/ghi tớivị trí xác định trước khi truy xuất. ‰ Dùng lệnh Get [#]filenumber, [position], AVariable để đọcdữ liệutừ vị trí position rồichứa vào biến AVariable. Số byte được đọc = kích thướccủa biếndữ liệu. ‰ Dùng lệnh Put [#]filenumber, [position], AVariable để ghi nội dung của biến AVariable ra file từ vị trí position. Số byte được ghi = kích thướccủa biếndữ liệu. ‰ Sau khi đãxử lý xong file, ta dùng lệnh Close [#]filenum để đóng file lại. Môn : Tin học Khoa Công nghệ Thông tin Chương 11 : Quảnlýhệ thống file Trường ĐH Bách Khoa Tp.HCM Slide 296 148
  5. Thí dụ truy xuất Binary file ‰ Mỗi file khả thi (executable) đều có 1 header dài 20h (32) byte với các field như sau : Index Field Diễngiải 0 Magic Chuỗi2 kýtự magic "MZ" các field khác chưacầnchúý 18h Offset Offset tớibảng tái định chương trình stub Nếugiátrị field Offset (2 byte) ở offset 18h (24) có giá trị là 40h (64) thì file tương ứng là file executable trên Windows (*.exe, *.dll, *.ocx, *.scr, *.drv, ). Còn nếugiátrị Offset < 40h thì file tương ứng là file *.exe chạytrênDOS. ‰ Dựa vào Header trên, ta thử viết1 ứng dụng cho phép user chọn đường dẫn của 1 file bấtkỳ rồikiểm tra tính chấtcủa file đóvàhiểnthị kếtquả : ‰ Không phải file executable ‰ File executable chạytrênDOS ‰ File executable trên Windows (*.exe, *.dll, *.ocx, *.scr, *.drv, ). Môn : Tin học Khoa Công nghệ Thông tin Chương 11 : Quảnlýhệ thống file Trường ĐH Bách Khoa Tp.HCM Slide 297 Giao diện đề nghị củathídụ truy xuất Binary file Textbox hiểnthị đường dẫn file cầnkhảosát. Button duyệtvàchọn file. Textbox chứakếtquả khảosát. CommonDialog duyệt file (bịẩn) Option Explicit ' Thủ tụcxử lý sự kiện Click button Private Sub cmdBrowse_Click() CommonDialog1.ShowOpen ' hiểnthị cửasổ duyệtvàchọn file txtFileName.Text = CommonDialog1.FileName CheckFileClass (txtFileName.Text) End Sub Môn : Tin học Khoa Công nghệ Thông tin Chương 11 : Quảnlýhệ thống file Trường ĐH Bách Khoa Tp.HCM Slide 298 149
  6. Chi tiết hàm kiểmtraloạifile Private Sub CheckFileClass(strFileName As String) Dim FileNum As Integer Dim strMagic As String * 2 Dim intOffset As Integer FileNum = FreeFile ' Tìm chỉ số file chưadùngvàmở file Open strFileName For Binary As FileNum Get FileNum, 1, strMagic ' đọc 2 chuỗi 2 ký tự magic đầu file If strMagic <> "MZ" Then txtFileClass.Text = "Khong phai file executable" Exit Sub End If Get FileNum, &H19, intOffset ' đọc word Offset tớichương trình Stub If intOffset < &H40 Then txtFileClass.Text = "File executable tren MSDOS" Else txtFileClass.Text = "File executable tren Windows (*.exe, *.dll, *.ocx, )" End If Close #FileNum End Sub Môn : Tin học Khoa Công nghệ Thông tin Chương 11 : Quảnlýhệ thống file Trường ĐH Bách Khoa Tp.HCM Slide 299 11.3 Qui trình điểnhìnhđể truy xuất Random file ‰ Cú pháp lệnh open file Random như sau : Open pathname [For Random] As filenumber Len = reclength ‰ Phải khai báo kiểudữ liệumiêutả cấutrúccủatừng record dữ liệu được đọc/ghi rồi khai báo biếncókiểuvừa định nghĩa để chứa thông tin đọctừ /ghi ra file. ‰ Dùng lệnh Seek [#]filenumber, position để dời pointer đọc/ghi tớivị trí record xác định. ‰ Dùng lệnh Get [#]filenumber, [position], AVariable để đọcdữ liệutừ vị trí position rồichứa vào biến AVariable. Số byte được đọc = kích thướccủa record dữ liệu. ‰ Dùng lệnh Put [#]filenumber, [position], AVariable để ghi nội dung của biến AVariable ra file từ vị trí position. Số byte được ghi = kích thướccủa biến record dữ liệu. ‰ Sau khi đãxử lý xong file, ta dùng lệnh Close [#]filenumber để đóng file lại. Môn : Tin học Khoa Công nghệ Thông tin Chương 11 : Quảnlýhệ thống file Trường ĐH Bách Khoa Tp.HCM Slide 300 150
  7. Thí dụ truy xuất Random file Type SVRecord hoten As String *30 tuoi As Byte diachi As String *50 lop As String*10 End Type Dim MyRecord As Record ' định nghĩabiếnchứatừng record của file. Dim MaxSize As Long, RecordNumber As Long ' 1. mở file ở chếđộrandom-file. Open "HosoSinhvien" For Random As #1 Len = Len(MyRecord) MaxSize = LOF(1) \ Len(MyRecord) ' Tính số record trong file. ' 2. lặp đọctừng record từ cuối file lên đầu file For RecordNumber = MaxSize To 1 Step - 1 Seek #1, RecordNumber ' thiếtlậpvị trí truy xuất. Get #1, , MyRecord ' đọc record. ' Xử lý record vừa đọcvào Next RecordNumber ' 3. đóng file. Close #1 Môn : Tin học Khoa Công nghệ Thông tin Chương 11 : Quảnlýhệ thống file Trường ĐH Bách Khoa Tp.HCM Slide 301 11.4 Qui trình điểnhìnhđể truy xuất Sequential file ‰ Cú pháp lệnh open file Sequential như sau : Open pathname [Input | Output | Append] As filenumber [Len = buffersize] ‰ Nếu file đượcmởởchếđộInput & chưatồntạithìlỗi sai xãy ra. Nếu file đượcmởởchếđộOutput | Append & chưatồntạithìhệ thống sẽ tạora file mới. ‰ Dùng lệnh Line Input #filenumber, varname để đọc 1 hàng vănbảntừ file (kết thúc bởikýtự CR - Carriage Return hay CRLF). ‰ Dùng lệnh Input #filenumber, varlist để đọccácchuỗi hay số từ file (được trình bày chi tiết trong slide kế). ‰ Dùng hàm Input(number, [#]filenumber) để đọc1 chuỗitừ file (được trình bày chi tiết trong slide kế). ‰ Dùng lệnh Write #filenumber, [outputlist] để ghi các chuỗi hay số ra file (được trình bày chi tiết trong slide kế). ‰ Sau khi đãxử lý xong file, ta dùng lệnh Close [#]filenum để đóng file lại. Môn : Tin học Khoa Công nghệ Thông tin Chương 11 : Quảnlýhệ thống file Trường ĐH Bách Khoa Tp.HCM Slide 302 151
  8. Chi tiếtvề lệnh Input # ‰ Cú pháp : Input #filenumber, varlist trong đó varlist là danh sách các biếnchứagiátrị chuỗi hay số cần đọc, các biến trong danh sách đượcngăncáchbằng dấu','. ‰ Cách thứcxử lý dữ liệu trên file nhập: Dạng dữ liệutrênfile Giátrị nhận được dấu ',' hay dòng trống Empty #NULL# Null #TRUE# hay #FALSE# True hay False #yyyy-mm-dd hh:mm:ss# Ngày/giờ #ERROR errornumber# mã lỗi errornumber "abcdef" chuỗi abcdef 1254.386 giá trị 1254.386 Môn : Tin học Khoa Công nghệ Thông tin Chương 11 : Quảnlýhệ thống file Trường ĐH Bách Khoa Tp.HCM Slide 303 Chi tiếtvề hàm Input ‰ Ngoài lệnh Input vừagiớithiệu ở slide trước, VB cung cấp thêm hàm Input với đặctả sau : Input number, [#]filenumber trong đó number là số ký tự ANSI cần đọctừ file filenumber. ‰ Khác vớilệnh Input, kết quả trả về của hàm Input gồm mọikýtự thô trên file kể cả cáckýtựđiềukhiển CR, LF, khoảng trắng, ",", nháy kép ‰ Chỉ dùng hàm Input trên các file đượcmởởchếđộInput | Binary. Môn : Tin học Khoa Công nghệ Thông tin Chương 11 : Quảnlýhệ thống file Trường ĐH Bách Khoa Tp.HCM Slide 304 152
  9. Chi tiếtvề lệnh Write # ‰ Cú pháp : Write #filenumber, [outputlist] trong đó outputlist là danh sách các biểuthứcchứagiátrị chuỗi hay số cần ghi, các biểuthức trong danh sách đượcngăncáchbằng dấu','. ‰ Cách thứcxử lý in dữ liệurafile : Kiểudữ liệuKếtquả được ghi trên file outputlist chỉ có dấu ',' dòng trống (CRLF) Null #NULL# luận lý #TRUE# hay #FALSE# Date #yyyy-mm-dd hh:mm:ss# mã lỗi errornumber #ERROR errornumber# chuỗi abcdef "abcdef" số chuỗimiêutả số dùng dấu'.' ‰ Các kếtquả in đượcngăncáchvới nhau bởidấu ',' trên file xuất. Môn : Tin học Khoa Công nghệ Thông tin Chương 11 : Quảnlýhệ thống file Trường ĐH Bách Khoa Tp.HCM Slide 305 Thí dụ truy xuất Sequential file ‰ Ta thử viết ứng dụng cho phép user chọn đường dẫncủa 1 file text-only rồi đếm số từđượcchứa trong file này. Giả sử mỗitừ là 1 chuỗikýtự chữ số (a-z hay 0- 9) bấtkỳđượcngăn cách nhau bởicáckýtự không phảilàchữ số. Textbox hiểnthị đường dẫn file cầnkhảosát. Button duyệtvàchọn file. Textbox chứasố từ Option Explicit trong file. ' Thủ tụcxử lý sự kiện Click button Browse Private Sub cmdBrowse_Click() CommonDialog1.ShowOpen txtFileName.Text = CommonDialog1.FileName txtWordCount.Text = WordCount(txtFileName.Text) End Sub Môn : Tin học Khoa Công nghệ Thông tin Chương 11 : Quảnlýhệ thống file Trường ĐH Bách Khoa Tp.HCM Slide 306 153
  10. Chi tiếthàmđếmtừ trong file Private Function WordCount(strFileName As String) As Long Dim lngWcount As Long, FileNum As Integer, Char As String * 1 FileNum = FreeFile ' Tìm chỉ số file chưadùngvàmở file Open strFileName For Input As FileNum lngWcount = 0 Do While Not EOF(FileNum) ' Lặp đếnhết file. Do ' tìm các dấungăntrước1 từ mới Char = Input(1, #1) Char = LCase(Char) Loop Until ("a" <= Char And Char <= "z") Or ("0" <= Char And Char <= "9")_ Or EOF(FileNum) If EOF(FileNum) Then GoTo CloseRet lngWcount = lngWcount + 1 ' tăng số từ lên 1 Do ' tìm và bỏ các ký tự củatừ hiện hành Char = Input(1, #1) Char = LCase(Char) Loop Until Not (("a" <= Char And Char <= "z") Or ("0" <= Char And Char <= "9"))_ Or EOF(FileNum) If EOF(FileNum) Then GoTo CloseRet Loop CloseRet: WordCount = lngWcount Close #FileNum End Function Môn : Tin học Khoa Công nghệ Thông tin Chương 11 : Quảnlýhệ thống file Trường ĐH Bách Khoa Tp.HCM Slide 307 Các hàm xác định vị trí truy xuấttrongfile ‰ Hàm Loc (filenum) trả về vị trí truy xuấthiệntại trong file filenum. Mode Return Value Random chỉ số record đọc/ghi lầncuối cùng. Binary chỉ số byte đọc/ghi lầncuối cùng. Output chỉ số byte đọc/ghi lầncuối cùng /128 | Append (nhưng thường không dùng kếtquả này) | Input Ví dụ : Dim MyChar As Byte Open "TestFile" For Binary As #1 ' mở file để đọc/ghi. Do While Not EOF(1) ' lặpchođếnhết file. MyChar = Input(1, #1) ' đọcbyte kế tiếp. Debug.Print Loc(1) ' hiểnthị vị trí byte vừa được đọc Loop Close #1 ' đóng file. Môn : Tin học Khoa Công nghệ Thông tin Chương 11 : Quảnlýhệ thống file Trường ĐH Bách Khoa Tp.HCM Slide 308 154
  11. Các hàm xác định vị trí truy xuất trong file (tt) ‰ Hàm Seek (filenum) trả về vị trí truy xuấtkế tiếp trong file filenum. Mode Return Value Random hoạt động truy xuấtkế tiếpsẽ xảyraở vị trí record này Binary hoạt động truy xuấtkế tiếpsẽ xảyraở vị trí byte này | Output,vị trí byte đầutiênlà1, kế tiếplà2 | Append | Input Ví dụ : Dim MyChar As Byte Open "TestFile" For Input As #1 ' mở file để đọc. Do While Not EOF(1) ' lặpchođếnhết file. MyChar = Input(1, #1) ' đọckýtự (byte) kế tiếp. Debug.Print Seek(1) ' hiểnthị vị trí byte sẽđọckế tiếp Loop Close #1 ' đóng file. Môn : Tin học Khoa Công nghệ Thông tin Chương 11 : Quảnlýhệ thống file Trường ĐH Bách Khoa Tp.HCM Slide 309 Các hàm xác định vị trí truy xuất trong file (tt) ‰ Lệnh Seek [#]filenumber, position thiếtlậpvị trí truy xuấtkế tiếp trong file filenum. Mode Return Value Random hoạt động truy xuấtkế tiếpsẽ xảyraở vị trí record position Binary hoạt động truy xuấtkế tiếpsẽ xảyraở vị trí byte position | Output,vị trí byte đầutiênlà1, kế tiếplà2 | Append | Input Môn : Tin học Khoa Công nghệ Thông tin Chương 11 : Quảnlýhệ thống file Trường ĐH Bách Khoa Tp.HCM Slide 310 155
  12. 11.5 Các hàm truy xuấtthuộctínhfile ‰ Hàm FileDateTime (pathname) trả về ngày/giờ hiệuchỉnh lầncuốicủa file xác định bởi thông số pathname. Ví dụ :Dim MyStampAs Date MyStamp = FileDateTime ("c:\windows\win.com") ‰ Hàm GetAttr (pathname) trả về byte thuộc tính của file xác định bởi thông số pathname. Thứ tự các bit thuộc tính trong byte thuộc tính như sau : Giá trị Tên hằng gợinhớ Diễngiải 0 vbNormal Normal 1 vbReadOnly file chỉđọc 2 vbHidden file ẩn 4 vbSystem file hệ thống 8 vbVolume tên nhãn đĩa 16 vbDirectory thư mục 32 vbArchive file bị thay đổitừ lần backup cuối Môn : Tin học Khoa Công nghệ Thông tin Chương 11 : Quảnlýhệ thống file Trường ĐH Bách Khoa Tp.HCM Slide 311 Các hàm truy xuấtthuộc tính file (tt) Ví dụ : If GetAttr ("c:\windows\win.com") And vbReadOnly Then MsgBox "c:\windows\win.com là file chỉđọc" End If ‰ Hàm SetAttr pathname, attributes thiếtlậpthuộc tính của file xác định bởi thông số pathname theo byte attributes. Ví dụ : đoạn code sau sẽ thiếtlậpthuộc tính của file c:\windows\win.com về read-only. Dim bytFileAttr As Byte bytFileAttr = GetAttr ("c:\windows\win.com") bytFileAttr = bytFileAttr Or vbReadOnly ' Or bitwise SetAttr "c:\windows\win.com", bytFileAttr Môn : Tin học Khoa Công nghệ Thông tin Chương 11 : Quảnlýhệ thống file Trường ĐH Bách Khoa Tp.HCM Slide 312 156
  13. Các hàm truy xuấtthuộc tính file (tt) ‰ Hàm FreeFile [(rangenumber)] trả về 1 số thuộckiểu Integer miêu tả chỉ số file chưa được dùng (để ta dùng an toàn). Thường không cần dùng tham số khi gọi hàm này. ‰ Hàm LOF (#filenum) trả về 1 giá trị thuộckiểu Long miêu tả kích thước của file đã đượcmở và hiện đượcxácđịnh bởi thông số #filenum. Ví dụ : Dim lngFileSize As Long, filenum As Integer filenum = FreeFile Open "c:\windows\win.com" For Input As #filenum ' mở file lngFileSize = LOF (filenum) ' lấykíchthước file đãmở #1 Close #1 ' đóng file ‰ Hàm FileLen (pathname) trả về 1 giá trị thuộckiểu Long miêu tả kích thướccủafile xácđịnh bởi thông số pathname. Ví dụ : Dim lngFileSize As Long lngFileSize = FileLen ("c:\windows\win.com") Môn : Tin học Khoa Công nghệ Thông tin Chương 11 : Quảnlýhệ thống file Trường ĐH Bách Khoa Tp.HCM Slide 313 Lệnh nhân bản và xóa file ‰ Lệnh FileCopy SourcePath, DestPath. nhân bản file SourcePath ra file DestPath. Không đượcmở file rồi nhân bản nó. Ví dụ : FileCopy c:\autoexec.bat c:\backup\autoexec.bat ‰ Lệnh Kill pattern xóa từ 0 đến n file có tên thỏamãnmẫu pattern (dùng ký tự * và ? để miêu tả). Ví dụ : Kill "c:\windows\*.tmp" Môn : Tin học Khoa Công nghệ Thông tin Chương 11 : Quảnlýhệ thống file Trường ĐH Bách Khoa Tp.HCM Slide 314 157
  14. 11.6 Các lệnh xử lý thư mục ‰ Lệnh MkDir pathname : tạothư mụcmới. Ví dụ : MkDir "c:\windows\temp" ‰ Lệnh RmDir pathname : xóa thư mụctrống có tên là pathname, nếuthư mụcchưatrống thì phải dùng lệnh Kill và/hoặcRmDirđể xóa các file và thư mụccon củanótrước. Ví dụ : RmDir "c:\windows\tmp" ‰ Hàm CurDir [(drive)] : trả về đường dẫncủathư mụclàmviệccủa đĩa hiện hành (hoặccủa đĩa đượcxácđịnh bởi thanh số). Ví dụ : MyPath = CurDir ' trả về "c:\windows" nếutađang làm việc ở đây. ‰ Lệnh ChDir pathname : chuyểnthư mụclàmviệccủa ổđĩahiện hành về vị trí qui định bởi tham số. Ví dụ : ChDir "c:\windows\tmp" ‰ Lệnh ChDrive drive : chuyển ổđĩahiện hành vềổđĩa đượcxácđịnh trong tham số. Ví dụ : ChDrive "e" Môn : Tin học Khoa Công nghệ Thông tin Chương 11 : Quảnlýhệ thống file Trường ĐH Bách Khoa Tp.HCM Slide 315 Hàm duyệt các phầntử trong 1 thư mục ‰ Cú pháp : Dir [(pattern[, attributes])] trong đó pattern xác định mẫucácphầntử cần tìm, attributes miêu tả byte thuộc tính củaphầntử cần tìm. Nếucóthamsố pattern thì hàm Dir sẽ trả về đường dẫncủaphầntử đầutiêntìmđược (hay chuỗirỗng nếu không tìm được), nếu không có pattern thì hàm Dir trả về đường dẫncủaphầntử kế tiếpthỏa pattern đượcxácđịnh lầncuối. Ý nghĩa các bit trong byte attributes đã được trình bày trong silde 261. Môn : Tin học Khoa Công nghệ Thông tin Chương 11 : Quảnlýhệ thống file Trường ĐH Bách Khoa Tp.HCM Slide 316 158
  15. Thí dụ xóa file đệ qui ‰ Trong lúc hoạt động, các ứng dụng thường tạo ra các file tạmcóphần nớirộng là *.tmp, *.bak, Khi kết thúc, ứng dụng sẽ xóa các file tạm đi. Tuy nhiên trong 1 số trường hợp đặcbiệt (máy treo, mất điện, ) các file tạm không đượcxóahếtvàvẫntồntạitrênđĩacứng ở nhiềuthư mục khác nhau. Ta hãy thử viết1 ứng dụng cho phép user xác định mẫucác file cầnxóarồi tìm các file thỏamãnmẫu qui định và xóa chúng, việc tìm và xóa nên đệ qui từ vị trí mẫu để xóa triệt để. Thí dụ nếungười dùng nhập pattern c:\*.tmp, ứng dụng sẽ tìm và xóa mọi file *.tmp từ thư mụcgốc. Môn : Tin học Khoa Công nghệ Thông tin Chương 11 : Quảnlýhệ thống file Trường ĐH Bách Khoa Tp.HCM Slide 317 Giao diện đề nghị của ứng dụng DriveListBox chọn ổ đĩa. DirListBox chọnthư mục. TextBox nhập pattern file cần xóa. Button bắt đầu duyệt file đệ qui và xóa. ListBox hiểnthị các file bị xóa. Môn : Tin học Khoa Công nghệ Thông tin Chương 11 : Quảnlýhệ thống file Trường ĐH Bách Khoa Tp.HCM Slide 318 159
  16. Code của ứng dụng xóa file đệ qui Const QMAX = 10000 Dim strDirQueue(0 To QMAX) As String ' Hàng chứacácthư mụccần duyệt Dim iHead As Integer ' chỉ số trong hàng chứathư mụcsắp duyệt Dim iTail As Integer ' chỉ số trong hàng sắpchứathư mụccầnduyệt Private Sub Form_Resize() ScaleMode = vbPixels Dir1.Move 8, 45, 170, Me.ScaleHeight - 50 FileList.Move 180, 70, Me.ScaleWidth - 185, Me.ScaleHeight - 75 End Sub Private Sub Drive1_Change() ' thủ tụcxử lý sự kiệnchọn ổđĩa Dir1.Path = Drive1.Drive End Sub Private Sub Dir1_Change() ' thủ tụcxử lý sự kiệnchọnthư mục If (Right(Dir1.Path, 1) = "\") Then strDirQueue(0) = Dir1.Path Else strDirQueue(0) = Dir1.Path & "\" End If End Sub Môn : Tin học Khoa Công nghệ Thông tin Chương 11 : Quảnlýhệ thống file Trường ĐH Bách Khoa Tp.HCM Slide 319 Code của ứng dụng xóa file đệ qui (tt) ' Thủ tụcxử lý sự kiện Click button Start Private Sub cmdStart_Click() Dim bytPredIdx As Byte Dim bytCurIdx As Byte Dim strTmp As String bytPredIdx = 0 bytCurIdx = 1 iHead = 0 iTail = 1 While iHead QMAX) Then iHead = 0 Wend End Sub Môn : Tin học Khoa Công nghệ Thông tin Chương 11 : Quảnlýhệ thống file Trường ĐH Bách Khoa Tp.HCM Slide 320 160
  17. Code của ứng dụng xóa file đệ qui (tt) Private Sub DuyetXoaFileDequi() Dim Name As String, Path As String, strFilePath As String, intAttr As Integer Path = strDirQueue(iHead) Name = Dir(Path, vbDirectory) ' lấy1 phầntử thỏa mãn pattern Do While Name "." And Name QMAX) Then iTail = 0 Else ' nếu là file kiểm tra xem thỏa pattern không If LCase(Name) Like txtPattern.Text Then intAttr = intAttr And Not vbReadOnly SetAttr strFilePath, intAttr Kill strFilePath FileList.AddItem strFilePath End If End If End If Name = Dir ' lấyphầntử kế thỏa mãn pattern. Loop End Sub Môn : Tin học Khoa Công nghệ Thông tin Chương 11 : Quảnlýhệ thống file Trường ĐH Bách Khoa Tp.HCM Slide 321 MÔN TIN HỌC Chương 12 LINH KIỆN PHẦN MỀM & TRUY XUẤT DATABASE 12.1 Tổng quát về linh kiện phần mềm 12.2 Cách tạo và dùng linh kiện phần mềm 12.3 Tổng quát về truy xuất database 12.4 Tổng quát về debug mã nguồn VB Môn : Tin học Khoa Công nghệ Thông tin Chương 12 : Linh kiệnphầnmềm & truy xuất database Trường ĐH Bách Khoa Tp.HCM Slide 322 161