Tài liệu File , Thư mục và IO phần 1 - Pdf 97

Chương 9 : File , Thư mục và IO

Các lớp I/O của Microsoft .NET gồm hai loại chính. Loại thứ nhất truy xuất thông tin từ
hệ thống file và cho phép thực hiện các thao tác trên hệ thống file (như chép file, chuyển
thư mục). Hai lớp tiêu biểu là FileInfo và DirectoryInfo. Loại thứ hai quan trọng hơn,
gồm rất nhiều lớp cho phép đọc và ghi dữ liệu từ mọi kiểu stream. Stream có thể tương
ứng với một file nhị phân hay văn bả
n, một file trong không gian lưu trữ riêng, một kết
nối mạng, hoặc một vùng đệm bộ nhớ. Trong mọi trường hợp, cách thức tương tác với
stream đều như nhau. Trong chương này, chúng ta sẽ xem xét các lớp hệ thống file và các
lớp dựa-trên-stream.
Các mục trong chương này trình bày các vấn đề sau:
 Truy xuất và sửa đổi các thông tin của một file hay một thư mục (các mục 9.1, 9.2,
9.4, 9.5, và 9.16).
 Chép, di chuyển, xóa file hay thư mục (mục 9.3).
 Hiển thị động một cây thư mục trong một ứng dụng dựa-trên-Windows (mục 9.6) và
sử dụng các hộp thoại file (mục 9.17).
 Đọc và ghi file văn bản (mục 9.7) và file nhị phân (mục 9.8), cũng như tạo file tạm
(mục 9.15) và file trong một không gian lưu trữ riêng của người dùng (mục 9.18).
 Đọc file một cách bất đồng bộ (mục 9.9).
 Tìm file (mục 9.10) và kiểm tra hai file có trùng nhau hay không (mục 9.11).
 Làm việc với các chuỗi có chứa thông tin đường dẫn (mục 9.12 đến 9.14).
 Theo dõi sự thay đổi của hệ thống file (mục 9.19).
 Ghi ra cổng COM (mục 9.20).
1.1 Truy xuất các thông tin về file hay thư mục
V
VBạn cần truy xuất các thông tin về một file hay một thư mục, chẳng hạn ngày
tạo hay các thuộc tính của chúng.

LastAccessTime, và
LastWriteTime
FileInfo và
DirectoryInfo
Trả về các thể hiện System.DateTime
cho biết khi nào một file hay thư mục
được tạo ra, truy xuất lần cuối, và
cập nhật lần cuối.
FullName, Name,
và Extension
FileInfo và
DirectoryInfo
Trả về một chuỗi chứa tên đầy đủ,
tên thư mục hay tên file (cùng phần
mở rộng), và phần mở rộng.
Length FileInfo
Trả về kích thước file (tính theo
byte).
DirectoryName và
Directory
FileInfo
DirectoryName trả về chuỗi chứa tên
của thư mục cha; Directory trả về đối
tượng DirectoryInfo mô tả thư mục
cha, cho phép bạn truy xuất thêm
thông tin về nó.
Parent và Root
DirectoryInfo
Trả về đối tượng DirectoryInfo mô tả
thư mục cha hay thư mục gốc.

using System;
using System.IO;

public class FileInformation {

private static void Main(string[] args) {

if (args.Length == 0) {

Console.WriteLine("Please supply a file name:”);
return;
}

FileInfo file = new FileInfo(args[0]);

// Hiển thị thông tin file.
Console.WriteLine("Checking file: " + file.Name);
Console.WriteLine("File exists: " + file.Exists.ToString());

if (file.Exists) {

Console.Write("File created: ");
Console.WriteLine(file.CreationTime.ToString());
Console.Write("File last updated: ");
Console.WriteLine(file.LastWriteTime.ToString());
Console.Write("File last accessed: ");
Console.WriteLine(file.LastAccessTime.ToString());
Console.Write("File size (bytes): ");
Console.WriteLine(file.Length.ToString());
Console.Write("File attribute list: ");

Checking file: win.ini
File exists: True
File created: 2001-08-23 8:00:00 AM
File last updated: 2003-03-22 9:55:16 AM
File last accessed: 2003-05-26 2:21:53 PM
File size (bytes): 2128
File attribute list: Archive

Checking directory: windows
In directory: c:\
Directory exists: True
Directory created: 2000-01-01 8:03:33 AM
Directory last updated: 2003-05-26 2:25:25 PM
Directory last accessed: 2003-05-26 2:25:25 PM
Directory attribute list: Directory
Directory contains: 147 files
# Bạn có thể sử dụng các phương thức tĩnh của lớp File và Directory thay cho các
phương thức của lớp FileInfo và DirectoryInfo, nhưng bạn phải truyền tên file
hay đường dẫn mỗi lần gọi. Trong trường hợp thực hiện nhiều thao tác với
cùng một file hay thư mục thì sử dụng các lớp FileInfo và DirectoryInfo nhanh
hơn, vì chúng thực hiện kiểm tra bảo mật chỉ một lần.
1.2 Thiết lập các thuộc tính của file và thư mục
V
VBạn cần kiểm tra hay thay đổi các thuộc tính của file hay thư mục.
#
#


// Điều kiện dưới đây đúng, vì nó chỉ lọc ra
// thuộc tính read-only.
if ((file.Attributes & FileAttributes.ReadOnly) ==
FileAttributes.ReadOnly) {
Console.WriteLine("File is read-only (correct test).");
}

Console.ReadLine();
}
}
# Để hiểu được ví dụ trên, bạn cần biết rằng Attributes được tạo thành (ở dạng
nhị phân) bởi một dãy các chữ số 0 và 1, chẳng hạn 00010011. Mỗi chữ số 1 cho
biết một thuộc tính được thiết lập, mỗi chữ số 0 cho biết một thuộc tính không
được thiết lập. Khi bạn sử dụng phép AND, nó sẽ so sánh mỗi chữ số
này với
mỗi chữ số tương ứng trong giá trị liệt kê. Ví dụ, nếu bạn AND giá trị 00100001
(mô tả thuộc tính archive và read-only) với giá trị liệt kê 00000001 (mô tả thuộc
tính read-only), kết quả sẽ là 00000001 (chỉ có được chữ số 1 khi ở cả hai vị trí
tương ứng đều là 1).
Khi thiết lập một thuộc tính, bạn cũng phả
i sử dụng phép toán trên bit. Trong trường hợp
này, bạn cần cẩn thận để không vô ý xóa các thuộc tính khác.
// Chỉ thêm thuộc tính read-ony.
file.Attributes = file.Attributes | FileAttributes.ReadOnly;
// Chỉ xóa thuộc tính read-only.
file.Attributes = file.Attributes & ~FileAttributes.ReadOnly;
1.3 Chép, chuyển, xóa file hay thư mục
V
V


Mở một file (nếu nó tồn tại). OpenRead và
OpenText mở file trong chế độ chỉ-đọc, trả về một
đối tượng FileStream hay StreamReader.
OpenWrite mở file trong chế độ chỉ-ghi, trả về
một đối tượng FileStream. Xem thêm mục 9.7 và
9.8 để có thêm thông tin về việc đọc file.
Delete Xóa file (nếu nó tồn tại).
MoveTo
Chuyển một file đến đường dẫn mới, tên file được
chỉ định trong đối số. MoveTo cũng được sử dụng
để đổi tên một file mà không chuyển chỗ.

Bảng 9.3 Các phương thức dùng để thao tác đối tượng DirectoryInfo
Phương thức Mô tả
Create
Tạo thư mục được chỉ định. Nếu đường dẫn chỉ
định nhiều thư mục chưa tồn tại, tất cả sẽ được tạo
một lượt.
CreateSubdirectory
Tạo một thư mục với tên cụ thể bên trong thư mục
được mô tả bởi đối tượng DirectoryInfo. Nó cũng
trả về một đối tượng DirectoryInfo mô tả thư mục
con.
Delete
Xóa một thư mục (nếu nó tồn tại). Nếu muốn xóa
một thư mục có chứa các thư mục khác, bạn phải
sử dụng phương thức nạp chồng Delete chấp nhận
một thông số có tên là recursive và thiết lập nó là
true.
MoveTo

// Lấy thư mục đích.
string destinationDir = Path.Combine(destination.FullName,
dir.Name);

// Gọi đệ quy CopyDirectory().
CopyDirectory(dir, new DirectoryInfo(destinationDir));
}
}
}
Ví dụ sau sử dụng phương thức vừa viết ở trên để chép thư mục, đường dẫn các thư mục
được truyền qua dòng lệnh:
public class CopyDir {

private static void Main(string[] args) {

if (args.Length != 2) {

Console.WriteLine("usage: " +
"CopyDir [sourcePath] [destinationPath]");
return;
}

DirectoryInfo sourceDir = new DirectoryInfo(args[0]);
DirectoryInfo destinationDir = new DirectoryInfo(args[1]);

FileSystemUtil.CopyDirectory(new DirectoryInfo(sourceDir),
new DirectoryInfo(destinationDir));

Console.WriteLine("Copy complete.");
Console.ReadLine();

long totalSize = 0;

// Duyệt tất cả các file trong thư mục.
FileInfo[] files = directory.GetFiles();
foreach (FileInfo file in files) {
totalSize += file.Length;
}

// Duyệt tất cả các thư mục con.
if (includeSubdirectories) {

DirectoryInfo[] dirs = directory.GetDirectories();
foreach (DirectoryInfo dir in dirs) {
totalSize += CalculateDirectorySize(dir, true);
}
}

return totalSize;
}
}
Và dưới đây là ứng dụng thử nghiệm phương thức trên:
using System;
using System.IO;

public class CalculateDirSize {

private static void Main(string[] args) {

if (args.Length == 0) {


Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status