Bài giảng môn Tin học đại cương - Chương 11: Quản lý hệ thống file
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng môn Tin học đại cương - 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:
- bai_giang_mon_tin_hoc_dai_cuong_chuong_11_quan_ly_he_thong_f.pdf
Nội dung text: Bài giảng môn Tin học đại cương - Chương 11: Quản lý hệ thống file
- 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 ản lý h ệ th ống file Tr ườ ng ĐH Bách Khoa Tp.HCM Slide 289
- Tổng quát về thời gian sống của bi ến dữ li ệu Ch ươ ng trình x ử lý d ữ li ệu thông qua các bi ến d ữ li ệu. Nh ư ta đã bi ết, mỗi bi ến d ữ li ệu ch ỉ có đờ i s ống ng ắn ng ủi: ho ặc b ằng đờ i s ống c ủa 1 th ủ t ục, ho ặc b ằng đờ i s ống c ủa 1 module (hay đố i t ượ ng) ho ặc cao nh ất là b ằng th ời gian ch ạy ứng d ụng, t ừ lúc ứng d ụng đượ c n ạp vào b ộ nh ớ trong đế n lúc ch ươ ng trình k ết thúc th ực thi. Để l ưu gi ữ giá tr ị c ủa 1 s ố bi ến h ầu trao đổ i d ữ li ệu gi ữa 2 ứng d ụng khác nhau hay gi ữa 2 l ần ch ạ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 ứa tin b ền v ững trên nh ững đơ n vị ch ứa tin độ c l ập đượ c g ọi là file. Trong ch ươ ng 2, chúng ta đã trình bày các khái ni ệm v ề file, cách t ổ ch ức đĩ a c ứng thành cây phân c ấp các file c ũng nh ư các thao tác qu ản lý h ệ th ống file tr ực ti ếp b ởi ng ườ i dùng. Trong ch ươ ng này ta s ẽ nghiên c ứu chi ti ết các ph ươ ng ti ện mà VB cung c ấp để th ực hi ện các thao tác qu ản lý h ệ th ống file, đặ c bi ệt là vi ệc truy xu ất n ộ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 ản lý h ệ th ống file Tr ườ ng ĐH Bách Khoa Tp.HCM Slide 290
- Cấu trúc file Ở c ấp độ HĐH, file là danh sách g ồm n byte ch ưa có ng ữ ngh ĩa. Chính ứng d ụng ph ải t ự qui đị nh c ấu trúc c ụ th ể c ủa file mình t ạo ra/ đọ c l ại và ng ữ ngh ĩa c ủa t ừng đơ n v ị c ấu trúc này. VB cung c ấp cho ứng d ụng 3 d ạng file khác nhau, ứng v ới mỗi dạng file có 1 cách th ức truy xu ất d ữ li ệu t ươ ng ứng: file tu ần t ự (Sequential File) hay file v ăn b ản là danh sách g ồm n 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 ưa có cấu trúc. Thí d ụ file Word, file Excel, file kh ả thi - executable. file truy xu ất tr ực ti ế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 ản lý h ệ th ống file Tr ườ ng ĐH Bách Khoa Tp.HCM Slide 291
- Tổng quát về quản lý hệ thống file trong VB VB cung c ấp cho ng ườ i l ập trình 2 ph ươ ng pháp khác nhau để qu ản lý hệ th ống file: gọi các th ủ t ục truy ền th ố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 đố i t ượ ng FSO (File System Object). V ới ph ươ ng pháp này, đầ u tiên ng ườ i l ập trình s ẽ t ạo ra đố i t ượ ng FileSystemObject r ồi mỗi khi c ần qu ản lý h ệ th ống file, h ọ ch ỉ c ần g ọi method t ươ ng ứng c ủa đố i t ượ ng trên. Mặc dù FSO là ph ươ ng pháp h ướ ng đố i t ượ ng, r ất thân thi ện và d ễ dùng, nh ưng hi ện FSO ch ưa đủ mạnh, ch ỉ cho phép truy xu ất file text - văn b ản, ch ứ ch ưa cho phép truy xu ất 2 d ạng file Binary và Random. Do đó trong ch ươ ng này chúng ta ch ỉ t ập trung gi ới thi ệu ph ươ ng pháp dùng các th ủ t ục truy ền th ống để truy xu ất file. Sau này khi có điều ki ệ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 ản lý h ệ th ống file Tr ườ ng ĐH Bách Khoa Tp.HCM Slide 292
- 11.1 Tổng quát về truy xuất file trong VB Qui trình truy xu ất 1 file trong VB g ồm 3 b ướ c chính: mở/t ạo file (g ọi th ủ t ục Open): khai báo cho h ệ th ống bi ết ta s ắp s ửa truy xu ất 1 file đượ c xác đị nh b ởi đườ ng d ẫn c ụ th ể cùng các ch ế độ truy xu ất file c ụ th ể. lặp truy xu ất file thông qua vi ệc g ọi các th ủ t ục Input, Get, Write, Put, Th ườ ng mỗi th ủ t ục trên ch ỉ truy xu ất 1 đơ n v ị thông tin nh ỏ của file nên ta ph ải l ặp nhi ều l ần đế n khi h ế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 ọi th ủ t ục Close): khai báo cho h ệ th ống bi ết ta không còn mu ốn truy xu ất file n ữa để h ệ th ống c ấm không cho b ất k ỳ l ệnh nào trong ứng d ụng c ủa ta truy xu ất file n ữa. Để giúp các b ạn d ễ 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 ết trên t ừng lo ại file 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 ản lý h ệ th ống file Tr ườ ng ĐH Bách Khoa Tp.HCM Slide 293
- Bảng các l ệnh VB truy xuất file 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 ản lý h ệ th ống file Tr ườ ng ĐH Bách Khoa Tp.HCM Slide 294
- Bảng các function truy xuất file Dir: duy ệt các ph ần t ử trong 1 th ư mục FileCopy: nhân b ản vô tính 1 file thành file mới FileDateTime: đọ c/hi ệu ch ỉnh ngày/gi ờ hi ệu ch ỉnh file l ần cu ối FileLen: xác đị nh độ dài file ch ưa mở 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 ất hi ện hành trong file LOF: xác đị nh độ dài file đã mở Seek: xác đị nh/thi ết l ập v ị trí truy xu ất file GetAttr: đọ c thu ộ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 ản lý h ệ th ống file Tr ườ ng ĐH Bách Khoa Tp.HCM Slide 295
- 11.2 Qui trình điển hì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ếu ch ưa bi ết c ấu trúc d ữ li ệu c ủa file, nên dùng bi ến dãy các byte để đọ c/ghi d ữ li ệu t ừ/ra file nh ị phân. N ếu đã bi ết c ấu trúc d ữ li ệu c ủa file, nên khai báo ki ểu d ữ li ệu miêu t ả c ấu trúc đó r ồi khai báo bi ến có ki ểu vừa đị nh ngh ĩa để ch ứa thông tin đọ c t ừ file vào. Dùng l ệnh Seek [#] filenumber , position để d ời pointer đọ c/ghi t ới v ị trí xác đị nh tr ướ c khi truy xu ất. Dùng l ệnh Get [#] filenumber , [ position ], AVariable để đọ c d ữ li ệu t ừ v ị trí position rồi ch ứa vào bi ến AVariable. S ố byte đượ c đọ c = kích th ướ c của bi ến 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 ướ c của bi ến d ữ 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 ản lý h ệ th ống file Tr ườ ng ĐH Bách Khoa Tp.HCM Slide 296
- 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 ễn gi ải 0 Magic Chu ỗi 2 ký t ự magic "MZ" các field khác ch ưa c ần chú ý 18h Offset Offset t ới b ảng tái đị nh ch ươ ng trình stub Nếu giá 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 ếu giá tr ị Offset < 40h thì file t ươ ng ứng là file *.exe ch ạy trên DOS. Dựa vào Header trên, ta th ử vi ết 1 ứng d ụng cho phép user ch ọn đườ ng d ẫn của 1 file b ất k ỳ r ồi ki ểm tra tính ch ất c ủa file đó và hi ển th ị k ết qu ả: Không ph ải file executable File executable ch ạy trên DOS 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 ản lý h ệ th ống file Tr ườ ng ĐH Bách Khoa Tp.HCM Slide 297
- Giao di ện đề nghị của thí dụ truy xuất Binary file Textbox hi ển th ị đườ ng dẫn file c ần kh ảo sát. Button duy ệt và ch ọn file. Textbox ch ứa k ết qu ả kh ảo sát. CommonDialog duy ệt file (b ị ẩn) Option Explicit ' Th ủ t ục x ử lý s ự ki ện Click button Private Sub cmdBrowse_Click() CommonDialog1.ShowOpen ' hi ển th ị c ửa s ổ duy ệt và 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 ản lý h ệ th ống file Tr ườ ng ĐH Bách Khoa Tp.HCM Slide 298
- Chi ti ết hàm ki ểm tra loại file 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 ưa dùng và 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 ới ch ươ 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 ản lý h ệ th ống file Tr ườ ng ĐH Bách Khoa Tp.HCM Slide 299
- 11.3 Qui trình điển hì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 ểu d ữ li ệu miêu t ả c ấu trúc c ủa t ừng record d ữ li ệu đượ c đọ c/ghi r ồi khai báo bi ến có ki ểu v ừa đị nh ngh ĩa để ch ứa thông tin đọ c t ừ /ghi ra file. Dùng l ệnh Seek [#] filenumber , position để d ời pointer đọ c/ghi t ới v ị trí record xác đị nh. Dùng l ệnh Get [#] filenumber , [ position ], AVariable để đọ c d ữ li ệu t ừ v ị trí position rồi ch ứa vào bi ến AVariable. S ố byte đượ c đọ c = kích th ướ c củ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 ướ c củ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 ản lý h ệ th ống file Tr ườ ng ĐH Bách Khoa Tp.HCM Slide 300
- 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 ĩa bi ến ch ứa t ừ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 đọ c t ừng record t ừ cu ối file lên đầ u file For RecordNumber = MaxSize To 1 Step - 1 Seek #1, RecordNumber ' thi ết l ập v ị trí truy xu ất. Get #1, , MyRecord ' đọ c record. ' X ử lý record v ừa đọ c vào Next RecordNumber ' 3. đóng file. Close #1 Môn: Tin h ọc Khoa Công ngh ệ Thông tin Ch ươ ng 11: Qu ản lý h ệ th ống file Tr ườ ng ĐH Bách Khoa Tp.HCM Slide 301
- 11.4 Qui trình điển hì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 đượ c mở ở ch ế độ Input & ch ưa t ồn t ại thì l ỗi sai xãy ra. N ếu file đượ c mở ở ch ế độ Output | Append & ch ưa t ồn t ại thì h ệ th ống s ẽ tạo ra file mới. Dùng l ệnh Line Input # filenumber , varname để đọ c 1 hàng v ăn b ản t ừ file (k ết thúc b ởi ký t ự CR - Carriage Return hay CRLF). Dùng l ệnh Input #filenumber, varlist để đọ c các chu ỗi hay s ố t ừ file (đượ c trình bày chi ti ết trong slide k ế). Dùng hàm Input( number , [ #]filenumber ) để đọ c 1 chu ỗi t ừ 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 ản lý h ệ th ống file Tr ườ ng ĐH Bách Khoa Tp.HCM Slide 302
- Chi ti ết về l ệnh Input # Cú pháp: Input #filenumber, varlist trong đó varlist là danh sách các bi ến ch ứa giá tr ị chu ỗi hay s ố cần đọ c, các bi ến trong danh sách đượ c ng ăn cách b ằng d ấu ','. Cách th ức x ử lý d ữ li ệu trên file nh ập: Dạng d ữ li ệu trên file 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 ản lý h ệ th ống file Tr ườ ng ĐH Bách Khoa Tp.HCM Slide 303
- Chi ti ết về hàm Input Ngoài l ệnh Input v ừa gi ới thi ệu ở slide tr ướ c, VB cung c ấp thêm hàm Input v ới đặ c t ả sau: Input number , [ #]filenumber trong đó number là s ố ký t ự ANSI c ần đọ c t ừ file filenumber . Khác v ới l ệnh Input, k ết qu ả tr ả v ề c ủa hàm Input g ồm mọi ký t ự thô trên file k ể c ả các ký t ự điều khi ển CR, LF, kho ảng tr ắng, ",", nháy kép Ch ỉ dùng hàm Input trên các file đượ c mở ở ch ế độ Input | Binary. Môn: Tin h ọc Khoa Công ngh ệ Thông tin Ch ươ ng 11: Qu ản lý h ệ th ống file Tr ườ ng ĐH Bách Khoa Tp.HCM Slide 304
- Chi ti ết về l ệnh Write # Cú pháp: Write #filenumber, [outputlist ] trong đó outputlist là danh sách các bi ểu th ức ch ứa giá tr ị chu ỗi hay s ố cần ghi, các bi ểu th ức trong danh sách đượ c ng ăn cách b ằng d ấu ','. Cách th ức x ử lý in d ữ li ệu ra file: Ki ểu d ữ li ệu Kết qu ả đượ 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 ỗi miêu t ả s ố dùng d ấu '.' Các k ết qu ả in đượ c ng ăn cách v ới nhau b ởi d ấu ',' trên file xu ất. Môn: Tin h ọc Khoa Công ngh ệ Thông tin Ch ươ ng 11: Qu ản lý 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 ẫn c ủa 1 file text-only r ồi đế m s ố t ừ đượ c ch ứa trong file này. Gi ả s ử mỗi t ừ là 1 chu ỗi ký t ự ch ữ s ố (a-z hay 0-9) b ất k ỳ đượ c ng ăn cách nhau b ởi các ký t ự không ph ải là ch ữ s ố. Textbox hi ển th ị đườ ng dẫn file c ần kh ảo sát. Button duy ệt và ch ọn file. Textbox ch ứa s ố t ừ Option Explicit trong file. ' Th ủ t ục x ử 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 ản lý h ệ th ống file Tr ườ ng ĐH Bách Khoa Tp.HCM Slide 306
- Chi ti ết hàm đếm t ừ 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 ưa dùng và m ở file Open strFileName For Input As FileNum lngWcount = 0 Do While Not EOF(FileNum) ' L ặp đế n h ết file. Do ' tìm các d ấu ng ăn tr ướ c 1 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 ủa t ừ 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 ản lý 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ất trong file Hàm Loc (filenum) tr ả v ề v ị trí truy xu ất hi ện t ại trong file filenum. Mode Return Value Random ch ỉ s ố record đọ c/ghi l ần cu ối cùng. Binary ch ỉ s ố byte đọ c/ghi l ần cu ối cùng. Output ch ỉ s ố byte đọ c/ghi l ần cu ối cùng /128 | Append (nh ưng th ườ ng không dùng k ết qu ả 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 ặp cho đế n h ết file. MyChar = Input(1, #1) ' đọ c byte k ế ti ếp. Debug.Print Loc(1) ' hi ển th ị 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 ản lý h ệ th ống file Tr ườ ng ĐH Bách Khoa Tp.HCM Slide 308
- 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 ất k ế ti ếp trong file filenum. Mode Return Value Random ho ạt độ ng truy xu ất k ế ti ếp s ẽ x ảy ra ở v ị trí record này Binary ho ạt độ ng truy xu ất k ế ti ếp s ẽ x ảy ra ở v ị trí byte này | Output , vị trí byte đầ u tiên là 1, k ế ti ếp là 2 | Append | Input Ví d ụ: Dim MyChar As Byte Open "TestFile" For Input As #1 ' mở file để đọ c. Do While Not EOF(1) ' l ặp cho đế n h ết file. MyChar = Input(1, #1) ' đọ c ký t ự (byte) k ế ti ếp. Debug.Print Seek(1) ' hi ển th ị v ị trí byte s ẽ đọ c k ế ti ếp Loop Close #1 ' đóng file. Môn: Tin h ọc Khoa Công ngh ệ Thông tin Ch ươ ng 11: Qu ản lý 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 ết l ập v ị trí truy xu ất k ế ti ếp trong file filenum. Mode Return Value Random ho ạt độ ng truy xu ất k ế ti ếp s ẽ x ảy ra ở v ị trí record position Binary ho ạt độ ng truy xu ất k ế ti ếp s ẽ x ảy ra ở v ị trí byte position | Output , vị trí byte đầ u tiên là 1, k ế ti ếp là 2 | Append | Input Môn: Tin h ọc Khoa Công ngh ệ Thông tin Ch ươ ng 11: Qu ản lý h ệ th ống file Tr ườ ng ĐH Bách Khoa Tp.HCM Slide 310
- 11.5 Các hàm truy xuất thuộc tính file Hàm FileDateTime (pathname ) tr ả v ề ngày/gi ờ hi ệu ch ỉnh l ần cu ối c ủa file xác đị nh b ởi thông s ố pathname . Ví d ụ: Dim MyStamp As 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 ợi nh ớ Di ễn gi ả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 đổ i t ừ l ần backup cu ối Môn: Tin h ọc Khoa Công ngh ệ Thông tin Ch ươ ng 11: Qu ản lý h ệ th ống file Tr ườ ng ĐH Bách Khoa Tp.HCM Slide 311
- Các hàm truy xuất thuộ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 ết l ập thu ộ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 ết l ập thu ộ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 ản lý h ệ th ống file Tr ườ ng ĐH Bách Khoa Tp.HCM Slide 312
- Các hàm truy xuất thuộc tính file (tt) Hàm FreeFile [ (rangenumber) ] tr ả v ề 1 s ố thu ộc ki ể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 ộc ki ểu Long miêu t ả kích th ướ c của file đã đượ c mở và hi ện đượ c xá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 ấy kích th ướ c file đã mở #1 Close #1 ' đóng file Hàm FileLen (pathname ) tr ả v ề 1 giá tr ị thu ộc ki ểu Long miêu t ả kích th ướ c c ủa file 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 ản lý 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 đượ c mở 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 ỏa mãn mẫ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 ản lý h ệ th ống file Tr ườ ng ĐH Bách Khoa Tp.HCM Slide 314
- 11.6 Các l ệnh xử lý thư mục Lệnh MkDir pathname : t ạo th ư mục mới. Ví d ụ: MkDir "c:\windows\temp" Lệnh RmDir pathname : xóa th ư mục tr ống có tên là pathname , n ếu th ư mục ch ưa tr ống thì ph ải dùng l ệnh Kill và/ho ặc RmDir để xóa các file và th ư mục con c ủa nó tr ướ c. Ví d ụ: RmDir "c:\windows\tmp" Hàm CurDir [(drive)] : tr ả v ề đườ ng d ẫn c ủa th ư mục làm vi ệc c ủa đĩ a hi ện hành (ho ặc c ủa đĩ a đượ c xác đị nh b ởi thanh s ố). Ví d ụ: MyPath = CurDir ' tr ả v ề "c:\windows" n ếu ta đang làm vi ệc ở đây. Lệnh ChDir pathname : chuy ển th ư mục làm vi ệc c ủa ổ đĩ a hi ện hành v ề vị trí qui đị nh b ởi tham s ố. Ví d ụ: ChDir "c:\windows\tmp" Lệnh ChDrive drive : chuy ển ổ đĩ a hi ện hành v ề ổ đĩ a đượ c xá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 ản lý h ệ th ống file Tr ườ ng ĐH Bách Khoa Tp.HCM Slide 315
- Hàm duyệt các phần t ử trong 1 thư mục Cú pháp: Dir [(pattern [, attributes ])] trong đó pattern xác đị nh mẫu các ph ần t ử c ần tìm, attributes miêu t ả byte thu ộc tính c ủa ph ần t ử c ần tìm. Nếu có tham s ố pattern thì hàm Dir s ẽ tr ả v ề đườ ng d ẫn c ủa ph ần t ử đầ u tiên tìm đượ c (hay chu ỗi r ỗng n ếu không tìm đượ c), n ếu không có pattern thì hàm Dir tr ả v ề đườ ng d ẫn c ủa ph ần t ử k ế ti ếp th ỏa pattern đượ c xác đị nh l ần cu ố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 ản lý h ệ th ống file Tr ườ ng ĐH Bách Khoa Tp.HCM Slide 316
- 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 ạm có ph ần nới r ộ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 đặ c bi ệt (máy treo, mất điện, ) các file tạm không đượ c xóa h ết và v ẫn t ồn t ại trên đĩ a c ứng ở nhi ều th ư mục khác nhau. Ta hãy th ử vi ết 1 ứng d ụng cho phép user xác đị nh mẫu các file c ần xóa r ồi tìm các file th ỏa mãn mẫ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 ếu ng ườ i dùng nh ập pattern c:\*.tmp, ứng d ụng s ẽ tìm và xóa mọi file *.tmp t ừ th ư mục g ốc. Môn: Tin h ọc Khoa Công ngh ệ Thông tin Ch ươ ng 11: Qu ản lý 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 ọn th ư mục. TextBox nh ập pattern file c ần xóa. Button b ắt đầ u duy ệt file đệ qui và xóa. ListBox hi ển th ị các file b ị xóa. Môn: Tin h ọc Khoa Công ngh ệ Thông tin Ch ươ ng 11: Qu ản lý h ệ th ống file Tr ườ ng ĐH Bách Khoa Tp.HCM Slide 318
- Code của ứng dụng xóa file đệ qui Const QMAX = 10000 Dim strDirQueue(0 To QMAX) As String ' Hàng ch ứa các th ư m ục c ần duy ệt Dim iHead As Integer ' ch ỉ s ố trong hàng ch ứa th ư m ục s ắp duy ệt Dim iTail As Integer ' ch ỉ s ố trong hàng s ắp ch ứa th ư m ục c ần duy ệ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 ục x ử lý s ự ki ện ch ọn ổ đĩ a Dir1.Path = Drive1.Drive End Sub Private Sub Dir1_Change() ' th ủ t ục x ử lý s ự ki ện ch ọn th ư 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 ản lý 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 ục x ử 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 ản lý h ệ th ống file Tr ườ ng ĐH Bách Khoa Tp.HCM Slide 320
- 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 ấy 1 ph ần t ử 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 ấy ph ần t ử 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 ản lý h ệ th ống file Tr ườ ng ĐH Bách Khoa Tp.HCM Slide 321