Professional Documents
Culture Documents
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.
Khởi tạo một đối tượng DirectoryInfo bằng tên của thư mục muốn tham chiếu.
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 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.
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ụ:
Để 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ụ:
{
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
t.Run( );
int bytesRead;
outputStream.Write(buffer,0,bytesRead);
inputStream.Close( );
outputStream.Close( );
Đố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ụ:
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ụ:
Ví dụ:
using System;
using System.IO;
namespace Programming_CSharp
class Tester
t.Run( );
string text;
do
text = reader.ReadLine();
writer.WriteLine(text);
Console.WriteLine(text);
reader.Close();
writer.Close();
Để 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:
try
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(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.
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.
document.Load(path);
childnode.Attributes("employeeid").Name + "=" +
childnode.Attributes("employeeid").Value);
foreach (XmlNode node in childnode.ChildNodes)
if (node.Name == "firstname")
if (node.Name == "lastname")
if (node.Name == "homephone")
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()
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.
ListBox1.Items.Clear();
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
ListBox1.Items.Add(node.Name);
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”:
doc.Load(Application.StartupPath + "\\employees.xml");
if (RadioButton1.Checked == true)
{
TextBox1.Text + "']");
if (RadioButton2.Checked)
TextBox1.Text + "']");
//của tập hợp các nút employee vừa tìm được ở trên
ComboBox1.Items.Add(node.Attributes("employeeid").Value);
ComboBox1.SelectedIndex = 0;
{
//label FirstName = giá trị nằm giữa cặp tag <firstname>...</firstname>
Label8.Text = nodelist(ComboBox1.SelectedIndex).ChildNodes(0).InnerText;
Label9.Text = nodelist(ComboBox1.SelectedIndex).ChildNodes(1).InnerText;
Label10.Text = nodelist(ComboBox1.SelectedIndex).ChildNodes(2).InnerText;
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.