Tài liệu Các lớp cơ sở phần 4 doc

9 316 0
Tài liệu Các lớp cơ sở phần 4 doc

Đang tải... (xem toàn văn)

Thông tin tài liệu

Khi một luồng được thiết lập và chỉ đến một tập tin, chúng ta thể viết vào trong luồng và nó sẽ được viết vào tập tin: myFile.WriteLine(“Khong co viec gi kho”); Dòng lệnh trên viết một chuỗi vào trong tập tin, việc viết này giống như là viết ra màn hình console. Nhưng ở đây là được viết ra thiết bị khác, tức là ra tập tin. Sau khi thực hiện toàn bộ công việc, cần thiết phải đóng luồng lại bằng cách gọ i phương thức Close. Đọc tập tin văn bản Đọc dữ liệu từ tập tin văn bản cũng tương tự như việc viết thông tin vào nó. Ví dụ minh họa tiếp sau đây thực hiện việc đọc tập tin mà chúng ta đã tạo ra từ chương trình minh họa 12.7 trước. Đây là chương trình đọc tập tin văn bản. Ví dụ 12.8: Đọc một tập tin văn bản. using System; using System.IO; namespace Programming_CSharp { public class Tester { public static void Main(string[] args) { if ( args.Length < 1) { Console.WriteLine(“Phai nhap ten tap tin”); } else { string buffer; StreamReader myFile = File.OpenText( args[0]); while ( (buffer = myFile.ReadLine()) !=null) { Console.WriteLine(buffer ); } myFile.Close(); } } } } Nếu chúng ta nhập đúng tên của tập tin vừa tạo trong ví dụ trước thì kết quả chương trình thực hiện như sau: Kết quả: Khong co viec gi kho Chi so long khong ben Dao nui va lap bien Quyet chi at lam nen 0 1 2 3 4 5 6 7 8 9 Nếu chương trình được cung cấp đầy đủ tên tập tin thì nó sẽ bắt đầu thực hiện việc đọc thông tin. Đầu tiên là khai báo một chuỗi dùng làm chỗ lưu thông tin đọc tử tập tin ra. Để mở tập tin văn bản thì phương thức OpenText được gọi. Phương thức này được truyền vào tên của tập tin văn bản cần mở. Một lần nữa một luồng tên myFile được tạo ra gắn với tập tin đã cho, luồng này kiểu là StreamReader. Phương thức ReadLine() của myFile thực hiện việc đọc từng dòng trong tập tin và sau đó được xuất ra màn hình console. Việc đọc này kết hợp với việc ki ểm tra là đã đọc đến cuối tập tin chưa, nếu đọc đến cuối tập tin, tức là hàm ReadLine() trả về chuỗi rỗng, lúc này chương trình sẽ kết thúc việc đọc. Cuối cùng hàm Close được gọi để đóng tập tin lại, và chương trình chấm dứt. Trong chương trình này cũng không xử lý ngoại lệ, nếu tập tin không tồn tại chương trình sẽ phát sinh ra ngoại lệ và ngoại lệ này không được x ử lý. Đề nghị người đọc nên đưa vào các đoạn xử lý ngoại lệ tương tự như ví dụ 12.6 Viết thông tin nhị phân vào tập tin Nếu chúng ta sử dụng một tập tin văn bản, thì khi chúng ta lưu dữ liệu kiểu số thì phải thực hiện việc chuyển đổi sang dạng chuỗi ký tự để lưu vào trong tập tin văn bản và khi lấy ra ta cũng lấy được giá trị chuỗi ký tự do đó ta phả i chuyển sang dạng số. Đôi khi chúng ta muốn cách thức nào đó tốt hơn để lưu trực tiếp giá trị vào trong tập tin và sau đó đọc trực tiếp giá trị ra từ tập tin. Ví dụ khi viết một số lượng lớn các số integer vào trong tập tin như là những số nguyên, thì khi đó ta thể đọc các giá trị này ra như là số integer. Trường hợp nếu chúng được viết vào tập tin với dạng văn b ản, thì khi đọc ra ta phải đọc ra văn bản và phải chuyển mỗi giá trị từ một chuỗi đến các số integer. Tốt hơn việc phải thực hiện thêm các bước chuyển đổi, ta thể gắn một kiểu luồng nhị phân BinaryStream vào trong một tập tin, rồi sau đó đọc và ghi thông tin nhị phân từ luồng này. Tiếp theo ta sẽ xem một ví dụ minh họa việc đọc viết dữ liệu nh ị phân vào một tập tin. Mặc dù trong chương trình này thực hiện việc viết 100 giá trị integer vào trong một tập tin nhưng có thể dễ dàng viết bất cứ kiểu dữ liệu nào khác. Ghi chú: Thông tin nhị phân là thông tin đã được định dạng kiểu lưu trữ dữ liệu. Ví dụ 12.9: Viết vào một tập tin nhị phân. //binarywriter.cs using System; using System.IO; namespace Programming_CSharp { public class Tester { public static void Main(string[] args) { if ( args.Length < 1) { Console.WriteLine(“Phai nhap ten tap tin!”); } else { FileStream myFile = new FileStream( args[0], FileMode.CreateNew); BinaryWriter bwFile = new BinaryWriter(myFile); f o r (int i=0; i < 100; i++) { bwFile.Write(i); } bwFile.Close() ; myFile.Close() ; } } } } Cũng tương tự như các ví dụ trên thì tên tập tin được đưa vào tham số dòng lệnh. Nếu chương trình được nhập các tham số đầy đủ, chương trình sẽ thực hiện việc viết thông tin nhị phân vào trong tập tin, và không output ra màn hình console. Nếu chúng ta mở tập tin và xem thì chỉ thấy các ký tự mở rộng đựơc thể hiện, sẽ không thấy những số đọc được. Trong chương trình này cũng chưa th ực hiện việc xử lý các ngoại lệ. Nếu thực hiện việc viết thông tin vào một tập tin đã hiện hữu, thì một ngoại lệ sẽ được phát sinh khi thực hiện lệnh: FileStream myFile = new FileStream( args[0], FileMode.CreateNew); Trong chương trình 12.9 này thực hiện việc tạo và mở tập tin khác với việc mở tập tin văn bản. Lệnh trên tạo một đối tượng FileStream gọi là myFile. Luồng này được gắn với tậ p tin thông qua bộ khởi dựng. Tham số đầu tiên của bộ khởi dựng là tên của tập tin mà chúng ta tạo (args[0]), tham số thứ hai là mode mà chúng ta mở. Tham số này là giá trị kiểu liệt kê FileMode, trong chương trình thì do chúng ta thực hiện việc tạo mới để ghi nên sử dụng giá trị FileMode.CreateNew. Bảng 12.3 sau liệt kê những mode giá trị khác trong kiểu liệt kê FileMode. Giá trị Định nghĩa Append Mở một tập tin hiện hữu hoặ c tạo một tập tin mới Create Tạo một tập tin mới. Nếu một tập tin đã hiện hữu, nó sẽ bị xóa và một tập tin mới sẽ được tạo ra với cùng tên. CreateNew Tạo một tập tin mới. Nếu một tập tin đã tồn tại thì một ngoại lệ sẽ được phát sinh. Open Mở tập tin hiện hữu. OpenOrCreate Mở tập tin hay tạo tập tin mớ i nếu tập tin chưa tồn tại Truncate Mở một tập tin hiện hữu và xóa nội dung của nó. Bảng 12.4: Giá trị của FileMode. Sau khi tạo ra FileStream, chúng ta cần thiết phải thiết lập để nó làm việc với dữ liệu nhị phân. Dòng lệnh tiếp theo: BinaryWriter bwFile = new BinaryWriter(myFile); Dòng này thiết lập một kiểu viết dữ liệu nhị phân vào trong luồng bằng cách khai báo kiểu BinaryWrite. Đối tượng thể hiện của BinaryWrite là bwFile được tạo ra. myFile được truyền vào bộ khởi dựng BinaryWrite, nó sẽ gắn bwFile với myFile. for (int i=0; i < 100; i++) { bwFile.Write(i) ; } Vòng lặp này thực hiện việc viết trực tiếp giá trị integer vào trong BinaryWrite bwFile bằng cách sử dụng phương thức Write. Dữ liệu được viết thể là kiểu dữ liệu đặc biệt khác. Trong chương trình này thì sử dụng giá trị integer. Khi thực hiện xong các công việc viết vào tập tin, chúng ta cần thiết phải đóng luồng mà chúng tả đã mở. Đọc thông tin nhị phân từ tập tin Trong phầ n trước chúng ta đã thực hiện việc viết thông tin nhị phân vào trong tập tin, và bây giờ chúng ta mong muốn được đọc các thông tin đã ghi vào trong tập tin. Việc đọc thông tin cũng khá đơn giản như là việc viết vào. Chương trình 12.10 sau minh họa cho công việc này. Ví dụ 12.10: Đọc thông tin nhị phân. // BinaryRead.cs: Doc thong tin tu file nhi phan namespace Programming_CSharp { using System; using System.IO; public class Tester { public static void Main( String[] args) { if ( args.Length < 1) { } else { Console.WriteLine(“Phai nhap ten tap tin”); FileStream myFile = new FileStream( args[0], FileMode.Open); BinaryReader brFile = new BinaryReader(myFile); // đọc dữ liệu Console.WriteLine(“Dang doc tap tin ”); while (brFile.PeekChar() != -1) { Console.Write(“<{0}>”, brFile.ReadInt32()); } Console.WriteLine(“ Doc xong”); brFile.Close(); myFile.Close(); } } } } . thể dễ dàng viết bất cứ kiểu dữ liệu nào khác. Ghi chú: Thông tin nhị phân là thông tin đã được định dạng kiểu lưu trữ dữ liệu. Ví dụ 12.9: Viết vào một. dung của nó. Bảng 12 .4: Giá trị của FileMode. Sau khi tạo ra FileStream, chúng ta cần thiết phải thiết lập để nó làm việc với dữ liệu nhị phân. Dòng

Ngày đăng: 21/01/2014, 00:20

Từ khóa liên quan

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan