Tài liệu File , Thư mục và IO phần 2 pdf

8 372 0
Tài liệu File , Thư mục và IO phần 2 pdf

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

Thông tin tài liệu

1.1 Truy xuất thông tin phiên bản của file V V Bạn cần truy xuất các thông tin về phiên bản của file như publisher, revision number, comment… # # Sử dụng phương thức tĩnh GetVersionInfo của lớp System.Diagnostics. FileVersionInfo. .NET Framework cho phép bạn truy xuất các thông tin về file mà không cần dựa vào Windows API. Bạn chỉ cần sử dụng lớp FileVersionInfo gọi phương thức GetVersionInfo với đối số là tên file. Kế đó, bạn có thể truy xuất thông tin thông qua các thuộc tính của FileVersionInfo. using System; using System.Diagnostics; public class VersionInfo { private static void Main(string[] args) { if (args.Length == 0) { Console.WriteLine("Please supply a file name."); return; } FileVersionInfo info = FileVersionInfo.GetVersionInfo(args[0]); // Hiển thị các thông tin về phiên bản. Console.WriteLine("Checking File: " + info.FileName); Console.WriteLine("Product Name: " + info.ProductName); Console.WriteLine("Product Version: " + info.ProductVersion); Console.WriteLine("Company Name: " + info.CompanyName); Console.WriteLine("File Version: " + info.FileVersion); Console.WriteLine("File Description: " + info.FileDescription); Console.WriteLine("Original Filename: " + info.OriginalFilename); Console.WriteLine("Legal Copyright: " + info.LegalCopyright); Console.WriteLine("InternalName: " + info.InternalName); Console.WriteLine("IsDebug: " + info.IsDebug); Console.WriteLine("IsPatched: " + info.IsPatched); Console.WriteLine("IsPreRelease: " + info.IsPreRelease); Console.WriteLine("IsPrivateBuild: " + info.IsPrivateBuild); Console.WriteLine("IsSpecialBuild: " + info.IsSpecialBuild); Console.ReadLine(); } } Dưới đây là kết xuất khi bạn chạy lệnh VersionInfo c:\windows\explorer.exe: Checking File: c:\windows\explorer.exe Product Name: Microsoft® Windows® Operating System Product Version: 6.00.2600.0000 Company Name: Microsoft Corporation File Version: 6.00.2600.0000 (xpclient.010817-1148) File Description: Windows Explorer Original Filename: EXPLORER.EXE Legal Copyright: © Microsoft Corporation. All rights reserved. InternalName: explorer IsDebug: False IsPatched: False IsPreRelease: False IsPrivateBuild: False IsSpecialBuild: False® 1.2 Sử dụng TreeView để hiển thị cây thư mục just-in-time V V Bạn cần hiển thị một cây thư mục trong TreeView. Tuy nhiên, việc lấp đầy cấu trúc cây thư mục khi khởi động tốn quá nhiều thời gian. # # Thêm cấp thư mục đầu tiên vào TreeView, thêm một nút giả (ẩn) vào mỗi nhánh. Phản ứng lại sự kiện TreeView.BeforeExpand để thêm các thư mục con vào một nhánh trước khi nó được hiển thị. Bạn có thể sử dụng kỹ thuật đệ quy để xây dựng toàn bộ cây thư mục. Tuy nhiên, việc quét hệ thống file theo cách này có thể chậm, đặc biệt đối với các ổ đĩa lớn. Vì lý do này, các phần mềm quả n lý file chuyên nghiệp (bao gồm Windows Explorer) sử dụng một kỹ thuật khác: chỉ hiển thị những thông tin nào người dùng cần đến. TreeView rất thích hợp với cách tiếp cận này vì nó cung cấp sự kiện BeforeExpand (sự kiện này phát sinh trước khi một cấp mới được hiển thị). Bạn có thể sử dụng một placeholder (như dấu hoa thị hay nút rỗng) trong tất cả các nhánh chưa được thêm vào. Điều này cho phép bạ n thêm vào các phần của cây thư mục khi chúng được hiển thị. Để sử dụng kiểu giải pháp này, bạn cần ba yếu tố sau: • Phương thức Fill—thêm một cấp mới vào một thư mục. Bạn sẽ sử dụng phương thức này để thêm vào các cấp khi chúng được mở rộng. • Phương thức thụ lý sự kiện Form.Load—sử dụng Fill để tạo cây với cấp đầu tiên. • Phương thức thụ lý sự kiện TreeView.BeforeExpand—phản ứng khi người dùng mở rộng một nút gọi Fill nếu thông tin của th ư mục này chưa được thêm. Dưới đây là phần mã cho form: using System; using System.IO; using System.Drawing; using System.Windows.Forms; public class DirectoryTree : System.Windows.Forms.Form { private System.Windows.Forms.TreeView treeDirectory; // (Bỏ qua phần mã designer.) private void Fill(TreeNode dirNode) { DirectoryInfo dir = new DirectoryInfo(dirNode.FullPath); // Một ngoại lệ có thể bị ném nếu bạn không có // đủ quyền thao tác trên file hay thư mục. // Bạn có thể bắt bỏ qua ngoại lệ này. foreach (DirectoryInfo dirItem in dir.GetDirectories()) { // Thêm nút giả cho thư mục. TreeNode newNode = new TreeNode(dirItem.Name); dirNode.Nodes.Add(newNode); newNode.Nodes.Add("*"); } } private void DirectoryTree_Load(object sender, System.EventArgs e) { // Thiết lập nút đầu tiên. TreeNode rootNode = new TreeNode("C:\\"); treeDirectory.Nodes.Add(rootNode); // Thêm cấp thứ nhất mở rộng nó. Fill(rootNode); treeDirectory.Nodes[0].Expand(); } private void treeDirectory_BeforeExpand(object sender, System.Windows.Forms.TreeViewCancelEventArgs e) { // Nếu tìm thấy một nút giả, xóa nó đọc các thư mục thật. if (e.Node.Nodes[0].Text == "*") { e.Node.Nodes.Clear(); Fill(e.Node); } } } Hình 9.1 Một cây thư mục với TreeView 1.3 Đọc ghi file văn bản V V Bạn cần ghi dữ liệu vào một file văn bản theo kiểu mã hóa ASCII, Unicode, hay UTF-8. # # Tạo một đối tượng System.IO.FileStream tham chiếu đến file. Để ghi file, hãy gói FileStream trong một System.IO.StreamWriter sử dụng phương thức nạp chồng Write. Để đọc file, hãy gói FileStream trong một System.IO.StreamReader sử dụng phương thức Read hay ReadLine. .NET cho phép bạn ghi hay đọc văn bản bằng lớp StreamWriter StreamReader. Khi ghi dữ liệu với StreamWriter, hãy sử dụng phương thức StreamWriter.Write. Phương thức này được nạp chồng để hỗ trợ tất cả các kiểu dữ liệu thông thường trong C# .NET, The image part with relationsh ip ID rI d5 was not fo und in the file. bao gồm chuỗi, ký tự, số nguyên, số thực dấu chấm động, số thập phân, Tuy nhiên, phương thức Write luôn chuyển dữ liệu thành văn bản. Nếu muốn chuyển văn bản này trở về kiểu ban đầu thì bạn nên sử dụng WriteLine để bảo đảm mỗi giá trị được đặt trên một dòng riêng. Có nhiều cách mô tả một chuỗi dưới dạng nhị phân, tùy thuộc vào cách mã hóa. Các kiểu mã hóa thông thườ ng là: • ASCII—sử dụng 7 bit để mã hóa mỗi ký tự trong chuỗi. Dữ liệu được mã hóa theo ASCII không thể chứa các ký tự Unicode mở rộng. Khi sử dụng kiểu mã hóa ASCII trong .NET, các bit được đệm thêm để mảng byte kết quả sẽ có 1 byte cho mỗi ký tự. • Full Unicode, hay UTF-16—sử dụng 16 bit để mã hóa mỗi ký tự trong chuỗi, nên mảng byte kết quả sẽ có 2 byte cho mỗi ký tự. • UTF-7 Unicode —sử dụng 7 bit cho các ký tự ASCII bình thường nhiều cặp 7 bit cho các ký tự mở rộng. Kiểu mã hóa này chủ yếu dùng cho các giao thức 7 bit, chẳng hạn mail. • UTF-8 Unicode—sử dụng 8 bit cho các ký tự ASCII bình thường nhiều cặp 8 bit cho các ký tự mở rộng. Mảng byte kết quả sẽ có 1 byte cho mỗi ký tự (giả sử không có ký tự mở rộng). .NET cung cấp một lớp cho mỗi kiểu mã hóa trong không gian tên System.Text. Khi sử d ụng StreamReader StreamWriter, bạn có thể chỉ định kiểu mã hóa hoặc sử dụng kiểu mặc định là UTF-8. Khi đọc thông tin, sử dụng phương thức Read hay ReadLine của lớp StreamReader. Phương thức Read đọc một ký tự, hay số ký tự do bạn chỉ định, trả về một ký tự hay mảng ký tự. Phương thức ReadLine trả về một chuỗi chứa toàn bộ nội dung một hàng. Ứng dụng Console dưới đây minh họa việc ghi đọc một file văn bản: using System; using System.IO; using System.Text; public class TextFileTest { private static void Main() { // Tạo file mới. FileStream fs = new FileStream("test.txt", FileMode.Create); // Tạo một writer chỉ định kiểu mã hóa. // Kiểu mặc định (UTF-8) hỗ trợ ký tự Unicode, // nhưng mã hóa các ký tự chuẩn giống như ASCII StreamWriter w = new StreamWriter(fs, Encoding.UTF8); // Ghi một số thập phân, một chuỗi, một ký tự. w.WriteLine(124.23M); w.WriteLine("Test string"); w.WriteLine('!'); // Bảo đảm tất cả dữ liệu được ghi từ buffer. w.Flush(); // Đóng file. w.Close(); fs.Close(); Console.WriteLine("Press Enter to read the information."); Console.ReadLine(); // Mở file trong chế độ chỉ-đọc. fs = new FileStream("test.txt", FileMode.Open); StreamReader r = new StreamReader(fs, Encoding.UTF8); // Đọc dữ liệu chuyển nó về kiểu thích hợp. Console.WriteLine(Decimal.Parse(r.ReadLine())); Console.WriteLine(r.ReadLine()); Console.WriteLine(Char.Parse(r.ReadLine())); r.Close(); fs.Close(); Console.ReadLine(); } } 1.4 Đọc ghi file nhị phân V V Bạn cần ghi dữ liệu vào file nhị phân với kiểu dữ liệu mạnh. # # Tạo một đối tượng System.IO.FileStream tham chiếu đến file. Để ghi file, hãy gói FileStream trong một System.IO.BinaryWriter sử dụng phương thức nạp chồng Write. Để đọc file, hãy gói FileStream trong một System.IO.BinaryReader sử dụng phương thức Read phù hợp với kiểu dữ liệu. .NET cho phép bạn ghi hay đọc dữ liệu nhị phân bằng lớp BinaryWriter BinaryReader. Khi ghi dữ liệu với BinaryWriter, hãy sử dụng phương thức BinaryWriter.Write. Phương thức này được nạp chồng để hỗ trợ tất cả kiểu dữ liệu thông thường trong C# .NET, bao gồm chuỗi, ký tự, số nguyên, số thực dấu chấm động, số thập phân, Thông tin sau đó được mã hóa thành một dãy các byte ghi vào file. Bạn có thể chỉ định kiểu mã hóa cho chuỗi bằng một phương thức khởi dựng nạp chồng nhận một đối tượng System.Text.Encoding làm đối số (đã được mô tả trong mục 9.7). Sử dụng file nhị phân để thao tác với các kiểu dữ liệu thì khá phức tạp, vì khi truy xuất thông tin, bạn phải sử d ụng một trong những phương thức Read kiểu mạnh của BinaryReader. Ví dụ: muốn truy xuất dữ liệu dạng thập phân thì phải sử dụng ReadDecimal; còn muốn đọc một chuỗi thì phải sử dụng ReadString (BinaryWriter luôn ghi lại chiều dài của chuỗi khi ghi chuỗi vào file để tránh lỗi). Ứng dụng Console dưới đây minh họa việc ghi đọc một file nhị phân: using System; using System.IO; public class BinaryFileTest { private static void Main() { // Tạo file tạo writer. FileStream fs = new FileStream("test.txt", FileMode.Create); BinaryWriter w = new BinaryWriter(fs); // Ghi một số thập phân, hai chuỗi, một ký tự. w.Write(124.23M); w.Write("Test string"); w.Write("Test string 2"); w.Write('!'); // Bảo đảm tất cả dữ liệu được ghi từ buffer. w.Flush(); // Đóng file. w.Close(); fs.Close(); Console.WriteLine("Press Enter to read the information."); Console.ReadLine(); // Mở file trong chế độ chỉ-đọc. fs = new FileStream("test.txt", FileMode.Open); // Hiển thị dữ liệu thô trong file. StreamReader sr = new StreamReader(fs); Console.WriteLine(sr.ReadToEnd()); Console.WriteLine(); // Đọc dữ liệu chuyển nó về kiểu thích hợp. fs.Position = 0; BinaryReader br = new BinaryReader(fs); Console.WriteLine(br.ReadDecimal()); Console.WriteLine(br.ReadString()); Console.WriteLine(br.ReadString()); Console.WriteLine(br.ReadChar()); fs.Close(); Console.ReadLine(); } } . 9.1 Một cây thư mục với TreeView 1.3 Đọc và ghi file văn bản V V Bạn cần ghi dữ liệu vào một file văn bản theo kiểu mã hóa ASCII, Unicode, hay UTF-8 System .IO. FileStream tham chiếu đến file. Để ghi file, hãy gói FileStream trong một System .IO. StreamWriter và sử dụng phương thức nạp chồng Write. Để đọc file,

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

Từ khóa liên quan

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

Tài liệu liên quan