Trọn bộ ký tự IO XML môn Kỹ thuật lập trình mạng | Đại học Bách Khoa, Đại học Đà Nẵng
Trọn bộ ký tự IO XML môn Kỹ thuật máy tính | Đại học Bách Khoa, Đại học Đà Nẵnggiúp sinh viên tham khảo, ôn luyện và phục vụ nhu cầu học tập của mình cụ thể là có định hướng, ôn tập, nắm vững kiến thức môn học và làm bài tốt trong những bài kiểm tra, bài tiểu luận, bài tập kết thúc học phần, từ đó học tập tốt và có kết quả cao cũng như có thể vận dụng tốt những kiến thức mình đã học
Preview text:
1. Lớp Path
Lớp Path cung cấp cho chúng ta các phương thức tĩnh tiện ích nhằm thao tác với đường
dẫn của tập tin hoặc thư mục. Một vài phương thức phổ biến trong Path là:
Combine: Kết hợp một mảng các đường dẫn với nhau và trả về một đường dẫn duy nhất.
Ví dụ: Path.Combine(@”C:\abc\”, @”efg\file.txt”); sẽ trả về C:\abc\efg\file.txt
GetDirectoryName: Trả về đường dẫn đến thư mục chứa tập tin trong đường dẫn đó. Ví
dụ: Path.GetDirectoryName(@”C:\abc\file.txt”) sẽ trả về chuỗi C:\abc
GetExtension: Trả về phần mở rộng của tập tin được chỉ định. Ví dụ:
Path.GetExtension(“Download.rar”) sẽ trả về chuỗi “.rar”
GetFileName: Lấy tên của tập tin từ đường dẫn được chỉ định. Tên tập tin được trả về sẽ
bao gồm cả phần mở rộng. Nếu chỉ muốn lấy tên không thôi thì sử dụng phương thức GetFileNameWithoutExtension
GetFullPath: Trả về đường dẫn đầy đủ đến tập tin được chỉ định. Đường dẫn này sẽ dựa
trên thư mục hiện tại của ứng dụng chạy. 2. Thư mục:
.NET Framework cung cấp cho chúng ta namespace System.IO để làm việc với thư mục
và tập tin trên máy tính.
Lớp Directory có nhiều phương thức dành cho việc tạo, di chuyển, duyệt thư mục. Các
phương thức trong lớp Directory đều là phương thức tĩnh;vì vậy không cần phải tạo một thể hiện
lớp Directory mà có thể truy xuất trực tiếp từ tên lớp.
Lớp DirectoryInfo là lớp tương tự như lớp Directory. Nó cung các tất cả các phương
thức mà lớp Directory có đồng thời bổ sung nhiều phương thức hữu ích hơn cho việc duyệt cấu
trúc cây thư mục. Lớp DirectoryInfo không có phương thức tĩnh, vì vậy cần tạo một thể hiện lớp
trước khi sử dụng các phương thức.
Các phương thức lớp Directory
Các phương thức/property lớp DirectoryInfo
Để duyệt cấu trúc cây thư mục, ta cần tạo một thể hiện của lớp DirectoryInfo. Lớp
DirectoryInfo không chỉ cung cấp phương thức lấy về tên các tập tin và thư mục con chứa trong
một thư mục mà còn cho phép lấy về các đối tượng FileInfo và DirectoryInfo, cho phép ta thực
hiện việc quản lý các cấu trúc cây thư mục, hay thực hiện các thao tác đệ qui.
Khởi tạo một đối tượng DirectoryInfo bằng tên của thư mục muốn tham chiếu.
DirectoryInfo dir = new DirectoryInfo(@"C:\winNT"); Ví dụ: 3. Tập tin:
Đối tượng DirectoryInfo cũng trả về danh sách các đối tượng FileInfo là các tập tin chứa
trong thư mục. Các đối tượng này mô tả thông tin về tập tin. Thư viện .NET cũng cung cấp hai
lớp File và FileInfo tương tự như với trường hợp thư mục. Lớp File chỉ có các phương thức tĩnh
và lớp FileInfo thì không có phương thức tĩnh nào cả.
Các phương thức lớp File
Các phương thức/property lớp FileInfo
Đối tượng FileInfo có thể dùng để tạo, sao chép, đổi tên và xoá một tập tin.
4. Đọc và ghi dữ liệu:
Đọc và ghi dữ liệu là nhiệm vụ chính của các luồng, Stream. Stream hỗ trợ cả hai cách
đọc ghi đồng bộ hay bất đồng bộ. .NET Framework cung cấp sẵn nhiều lớp thừa kế từ lớp
Stream, bao gồm FileStream, MemoryStream và NetworkStream. Ngoài ra còn có lớp
BufferedStream cung cấp vùng đệm xuất nhập được dùng thêm với các luồng khác. Ý nghĩa các luồng 4.1 Tập tin nhị phân:
Sử dụng lớp cơ sở Stream để đọc tập tin nhị phân. Lớp Stream có rất nhiều phương thức
nhưng quan trọng nhất là năm phương thức Read(), Write(), BeginRead(), BeginWrite() và Flush().
Để thao tác tập tin nhị phân (hay đọc tập tin theo kiểu nhị phân), ta bắt đầu tạo một cặp
đối tượng Stream, một để đọc, một để viết. Ví dụ:
Stream inputStream = File.OpenRead(@"C:\test\source\test1.cs");
Stream outputStream = File.OpenWrite(@"C:\test\source\test1.bak");
Để mở một tập tin để đọc và viết, ta sử dụng hai hàm tĩnh OpenRead() và OpenWrite()
của lớp File với tham số là đường dẫn tập tin.
Tiếp theo ta đọc dữ liệu từ inputStream cho đến khi không còn dữ liệu nữa và sẽ ghi dữ
liệu đọc được vào outputStream. Hai hàm lớp Stream phục vụ việc đọc ghi dữ liệu là Read() và Write(). Ví dụ:
while( (bytesRead = inputStream.Read(buffer,0,SIZE_BUFF)) > 0 ) {
outputStream.Write(buffer,0,bytesRead); }
buffer - một mảng các byte (được gọi là vùng đệm buffer) dùng để chứa dữ liệu theo dang byte;
tham số thứ hai cho biết vị trí bắt đầu đọc hay ghi trên vùng đệm;
tham số cuối cùng cho biết số byte cần đọc hay ghi.
Ví dụ: Cài đặt việc đọc và ghi tập tin nhị phân using System; using System.IO; namespace Programming_CSharp { class Tester { const int SizeBuff = 1024; public static void Main( ) { Tester t = new Tester( ); t.Run( ); } private void Run( ) { // đọc từ tập tin này
Stream inputStream = File.OpenRead(@"C:\test\source\test1.cs"); // ghi vào tập tin này
Stream outputStream = File.OpenWrite(@"C:\test\source\test1.bak");
// tạo vùng đệm chứa dữ liệu
byte[] buffer = new Byte[SizeBuff]; int bytesRead;
// sau khi đọc dữ liệu xuất chúng ra outputStream
while ( (bytesRead = inputStream.Read(buffer,0,SizeBuff)) > 0 ) {
outputStream.Write(buffer,0,bytesRead); }
// đóng tập tin trước khi thoát inputStream.Close( ); outputStream.Close( ); } } } 4.2 Tập tin văn bản
Đối với các tập tin chỉ chứa văn bản, ta sử dụng hai luồng StreamReader và StreamWriter
cho việc đọc và ghi. Hai lớp này được thiết kế để thao tác với văn bản dễ dàng hơn. Ví dụ như
chúng cung cấp hàm ReadLine() và WriteLine() để đọc và ghi một dòng văn bản.
Để tạo một thể hiện StreamReader ta gọi phương thức OpenText() của lớp FileInfo và
đọc từng dòng văn bản của tập tin cho đến hết Ví dụ:
FileInfotheSourceFile = new FileInfo (@"C:\test\source\test1.cs");
StreamReader stream = theSourceFile.OpenText( ); do { text = stream.ReadLine( ); } while (text != null);
Để tạo đối tượng StreamWriter ta truyền cho hàm khởi dựng đường dẫn tập tin, trong đó
tham số thứ hai thuộc kiểu bool, nếu tập tin đã tồn tại, giá trị true sẽ ghi dữ liệu mới vào cuối tập
tin, giá trị false sẽ xóa dữ liệu cũ, dữ liệu mới sẽ ghi đè dữ liệu cũ. Ví dụ:
StreamWriter writer = new StreamWriter(@"C:\test\source\folder3.bak", false); Ví dụ: using System; using System.IO; namespace Programming_CSharp { class Tester { public static void Main( ) { Tester t = new Tester( ); t.Run( ); } private void Run( ) { // mở một tập tin
FileInfo theSourceFile = new FileInfo(@"C:\test\source\test.cs");
// tạo luồng đọc văn bản cho tập tin
StreamReader reader = theSourceFile.OpenText( );
// tạo luồng ghi văn bản cho tập tin xuất
StreamWriter writer= new StreamWriter(@"C:\test\source\test.bak",false);
// tạo một biến chuỗi lưư giữ một dòng văn bản string text;
// đọc toàn bộ tập tin theo từng dòng
// ghi ra màn hình console và tập tin xuất do { text = reader.ReadLine(); writer.WriteLine(text); Console.WriteLine(text); } while (text != null); // đóng tập tin reader.Close(); writer.Close(); } } } 5. Thao tác với XML
5.1 Mở một tài liệu xml
Để mở một tài liệu XML, bạn cần sử dụng lớp XmlDocument. Lớp XmlDocument cho
phép bạn mở tài liệu XML theo 3 cách thông dụng sau:
Bạn có thể mở thông qua 1 đường dẫn trên ổ cứng, một URL, hoặc 1 tập tin XML.
Bạn có thể sử dụng đối tượng stream như FileStream chứa dữ liệu của tài liệu XML.
Bạn có mở thông qua 1 chuỗi chứa XML trong bộ nhớ
Ví dụ: Ứng dụng của chúng ta bao gồm: 3 radio button cho việc chọn nơi chứa tài liệu mà lớp
XmlDocument sẽ mở. 1 textbox dùng để nhập đường dẫn đến tập tin xml, hoặc URL hoặc 1
string chứa chuỗi XML. Cuối cùng là 1 button dùng để thực thi các câu lệnh để mở tài liệu. Sau
đây là đoạn code thụ lý tình huống Click của button:
private void Button1_Click(object sender, System.EventArgs e) { try { string path = TextBox1.Text;
XmlDocument document = new XmlDocument();
if (RadioButton1.Checked == true) { document.Load(path); }
if (RadioButton2.Checked == true) { System.IO.FileStream fs;
fs = System.IO.File.OpenRead(path); document.Load(fs); }
if (RadioButton3.Checked == true) { document.Load(path); }
MessageBox.Show("Mở tài liệu XML thành công!"); } catch (Exception ex) { MessageBox.Show(ex.Message); } }
Đoạn code trên tạo 1 thể hiện của lớp XmlDocument. Lớp này có 2 phương thức quan
trọng là: Load() và LoadXml(). Như bạn đã thấy, các đối số mà phương thức Load() nhận có thể
là: 1 chuỗi chứa URL chứa tài liệu xml, hoặc 1 stream, hoặc 1 chuỗi chứa tài liệu XML.
5.2 Di chuyển xuyên qua tài liệu xml
Một tài liệu XML bao gồm 1 hoặc nhiều nút, và có những nút nằm bên trong nút khác.
Những nút nằm bên trong nút khác gọi là nút con.
Lớp XmlNode có 1 tập hợp gọi là ChildNodes mà chứa danh sách tất cả các nút con của
một nút bất kỳ. Ngoài ra, chúng còn có các thuộc tính: ParentNode, FirstChild, LastChild,
NextSibling và PreviousSibling mà cho phép bạn di chuyển đến bất kỳ nút nào. Như thuộc tính
ParentNode giúp bạn di chuyển đến nút cha của 1 nút nào đó, hoặc thuộc tính NextSibling giúp
bạn di chuyển đến nút kế tiếp ở cùng cấp của nút hiện hành.
Ví dụ: hiển thị cấu trúc của tập tin XML lên treeview lúc chương trình được Load lên.
private void Form1_Load(object sender, System.EventArgs e) {
string path = Application.StartupPath + "\\employees.xml";
XmlDocument document = new XmlDocument(); document.Load(path);
TreeNode rootnode = TreeView1.Nodes.Add(document.DocumentElement.Name);
XmlNodeList nodes = document.DocumentElement.ChildNodes;
foreach (XmlNode childnode in nodes) {
TreeNode empNode = new TreeNode(childnode.Name + ":" +
childnode.Attributes("employeeid").Name + "=" +
childnode.Attributes("employeeid").Value);
foreach (XmlNode node in childnode.ChildNodes) { if (node.Name == "firstname") {
empNode.Nodes.Add("First Name:" + node.InnerText); } if (node.Name == "lastname") {
empNode.Nodes.Add("Last Name:" + node.InnerText); } if (node.Name == "homephone") {
empNode.Nodes.Add("Home Phone:" + node.InnerText); } if (node.Name == "notes") {
empNode.Nodes.Add("Notes:" + node.InnerText); } } rootnode.Nodes.Add(empNode); } }
Đoạn code tạo 1 thể hiện của lớp XmlDocument và nạp tập tin employees.xml được đặt
trong cùng thư mục của file thực thi của chương trình. Nút gốc của tài liệu xml có thể được truy
cập thông qua thuộc tính DocumentElement của đối tượng thể hiện của lớp XmlDocument.
Thuộc tính Name của DocumentElement trả về tên của nút gốc này (employees).