You are on page 1of 17

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).
Nút employees chứa 3 nút employee, để truy cập 3 nút này, ta dùng thuộc tính
ChildNodes của DocumentElement mà ta đã nói ở trên. Tà dùng vòng lặp foreach để đi lần lượt
qua từng nút employee một.

Để truy cập attribute employeeid, ta sử dụng collection Attribute của lớp XmlNode. Bạn
có thể xác định attribute nào cần lấy thông qua chỉ mục hoặc tên của nó. Để nhận được chuỗi
nằm giữa 1 cặp tag, ta dùng thuộc tính InnerText của XmlNode.

5.3 Nhận các phần tử bất kỳ bằng cách sử dụng phương thức GetElementByTagName()

Lớp XmlDocument có phương thức GetElementByTagName() giúp bạn tìm ra những


node có tag do bạn chỉ định.

Ví dụ: trong employees.xml có 3 nút employee, nhập chuỗi "employee" thì nó sẽ trả về 3 nút
này. Ứng dụng của chúng ta gồm 1 textbox để nhập tên tag cần lấy, 1 listbox để hiện thị danh
sách các nút có tag tìm được, 1 textbox để hiển thị nội dung của nút đó. Và 1 button để thực thi
câu lệnh dùng để lấy nút thông qua tên tag.

private void Button1_Click(object sender, System.EventArgs e)

//làm sạch listbox

ListBox1.Items.Clear();

//mở tài liệu XML

XmlDocument doc = new XmlDocument();

doc.Load(Application.StartupPath + "\\employees.xml");
//đưa tất cả các nút tìm được qua tên tag vào nodelist

nodelist = doc.GetElementsByTagName(TextBox1.Text);

//đi lần lượt qua từng node cuaa nodelist và đưa nó vào listbox

foreach (XmlNode node in nodelist)

ListBox1.Items.Add(node.Name);

private void ListBox1_SelectedIndexChanged(object sender, System.EventArgs e)

TextBox2.Text = nodelist(ListBox1.SelectedIndex).InnerText;

5.4 Chọn nhiều nút bất kỳ bằng cách sử dụng phương thức SelectNodes()

Lớp XmlDocument có phương thức SelectNodes() mà chấp nhận 1 chuỗi chứa câu truy
vấn để tìm lọc ra những nút mà bạn muốn, nó sẽ trả về đối tượng XmlNodeList chứa danh sách
tất cả các nút thỏa mãn điều kiện truy tìm.

Ví dụ: Ứng dụng của chúng ta bao gồm: 1 textbox để điền tên của 1 người nào đó; 2 radio
button: 1 để chọn tìm kiếm theo tên, 1 để chọn tìm kiếm theo họ; 2 button; 10 textbox; 1
combobox để hiện thị mã nhân viên (employeeid) tương ứng với nhân viên mà bạn tìm.

Nút “Tìm”:

private void Button1_Click(object sender, System.EventArgs e)

//mở tập tin employees.xml

XmlDocument doc = new XmlDocument();

doc.Load(Application.StartupPath + "\\employees.xml");

//nếu chọn radio button "Tên"

if (RadioButton1.Checked == true)
{

//chọn phần tử employee nào mà có con firstname nào = <textbox1.Text>

//trả về các nút employee hợp lệ vào biến nodelist

nodelist = doc.SelectNodes("/employees/employee[./firstname/text() = '" +

TextBox1.Text + "']");

//nếu chọn radio button "Họ"

if (RadioButton2.Checked)

//chọn phần tử employee nào mà có con lastname nào = <textbox1.Text>

//trả về các nút employee hợp lệ vào biến nodelist

nodelist = doc.SelectNodes("/employees/employee[./lastname/text() = '" +

TextBox1.Text + "']");

//đi xuyên qua các nút employee

//của tập hợp các nút employee vừa tìm được ở trên

foreach (XmlNode node in nodelist)

ComboBox1.Items.Add(node.Attributes("employeeid").Value);

ComboBox1.SelectedIndex = 0;

Nút “Hiển thị”

private void Button2_Click(object sender, System.EventArgs e)

{
//label FirstName = giá trị nằm giữa cặp tag <firstname>...</firstname>

Label8.Text = nodelist(ComboBox1.SelectedIndex).ChildNodes(0).InnerText;

//label LastName = giá trị nằm giữa cặp tag <lastname>...</lastname>

Label9.Text = nodelist(ComboBox1.SelectedIndex).ChildNodes(1).InnerText;

//label HomePhone = giá trị nằm giữa cặp tag <homephone>...</homephone>

Label10.Text = nodelist(ComboBox1.SelectedIndex).ChildNodes(2).InnerText;

//label notes = giá trị nằm giữa cặp tag <notes>...</notes>

Label11.Text = nodelist(ComboBox1.SelectedIndex).ChildNodes(3).InnerText;

nodelist(ComboBox1.SelectedIndex).ChildNodes(3).InnerText;

5.5 Chọn một nút bất kỳ bằng cách sử dụng phương thức SelectSingleNode()

Class XmlNode còn cung cấp cho bạn phương thức SelectSingleNode() cho việc chọn 1
nút.

You might also like