Input/Output with
.NET Framework Class
Library
Phạm Minh Tuấn
Bộ môn CNPM – Khoa CNTT
Nội dung trình bày
Navigating the File System
Reading and Writing Files
Compressing Streams
Navigating the File System
Nhu cầu:
Làm sao biết được trên hệ thống có
những ổ đĩa nào?
Làm sao lấy được danh sách tập tin và
thư mục con của một thư mục nào đó?
Làm sao truy xuất được các thuộc tính
của một tập tin, thư mục?
Làm sao giám sát được sự thay đổi của
một tập tin, thư mục?
…
Navigating the File System
Các lớp hỗ trợ
DriveInfo class
DirectoryInfo class
FileInfo class
Path class
FileSystemWatcher class
File class
Directory class
Navigating the File System
DriveInfo class
Thuộc tính
Navigating the File System
DriveInfo class
DriveType enum
Phương thức
Navigating the File System
FileSystemInfo class
Thuộc tính
Navigating the File System
FileSystemInfo class
Phương thức
Navigating the File System
DirectoryInfo class
Thuộc tính
Navigating the File System
DirectoryInfo class
Phương thức
Navigating the File System
FileInfo class
Thuộc tính
Navigating the File System
FileInfo class
Phương thức
Navigating the File System
Path class
Phương thức
Navigating the File System
Path class
Phương thức
Navigating the File System
FileSystemWatcher class
Thuộc tính
Navigating the File System
FileSystemWatcher class
Phương thức
Sự kiện
Navigating the File System
Làm sao biết được trên hệ thống có những ổ
đĩa nào?
DriveInfo[]
drives =
DriveInfo.GetDrives
();
foreach (DriveInfo drive in drives)
{
Console.WriteLine("Drive: {0}",
drive.Name
);
Console.WriteLine("Type: {0}",
drive.DriveType
);
}
Navigating the File System
Làm sao lấy được danh sách tập tin và thư
mục con của một thư mục nào đó?
DirectoryInfo
ourDir = new
DirectoryInfo(@"c:\windows");
Console.WriteLine("Directory: {0}",
ourDir.FullName
);
foreach (
FileInfo file in ourDir.GetFiles()
)
{
Console.WriteLine("File: {0}",
file.Name
);
}
Navigating the File System
Làm sao truy xuất được các thuộc tính của một
tập tin, thư mục?
FileInfo
ourFile = new
FileInfo(@"c:\boot.ini ");
if (
ourFile.Exists
)
{
Console.WriteLine("Filename : {0}",
ourFile.Name
);
Console.WriteLine("Path : {0}",
ourFile.FullName
);
}
Navigating the File System
Làm sao giám sát được sự thay đổi của một tập tin, thư
mục?
FileSystemWatcher
watcher = new
FileSystemWatcher();
watcher.Path = @"c:\";
watcher.Renamed += new
RenamedEventHandler(watcher_Renamed);
watcher.EnableRaisingEvents = true;
static void watcher_Renamed(object sender,
RenamedEventArgs e)
{
Console.WriteLine("Renamed from {0} to {1}",
e.OldFullPath, e.FullPath
);
}
Navigating the File System
Cung cấp tất cả các phương thức cần
thiết cho việc tạo file, xóa file, di
chuyển file, sao chép file…
Cung cấp tất cả các phương thức cần
thiết cho việc tạo thư mục, xóa thư
mục, di chuyển thư mục, lấy danh
sách tập tin, thư mục con…
Reading and Writing Files
Các lớp hỗ trợ
Stream class
FileStream class
StreamReader class, StreamWriter class
BinaryReader class, BinaryWriter class
MemoryStream class
BufferedStream class
Reading and Writing Files
Stream class
Thuộc tính
Reading and Writing Files
Stream class
Phương thức
Reading and Writing Files
FileStream class: kế thừa Stream
class
Thuộc tính
Phương thức
Reading and Writing Files
StreamReader class
Kế thừa TextReader class
Dùng để đọc các file văn bản
Thuộc tính
Reading and Writing Files
StreamReader class
Phương thức
Reading and Writing Files
Ví dụ
Đọc file văn bản
FileStream
theFile =
File.Open
(@"C:\boot.ini",
FileMode.Open, FileAccess.Read
);
StreamReader
rdr = new
StreamReader(theFile);
while (!rdr.
EndOfStream
)
{
string line = rdr.ReadLine();
Console.WriteLine(line);
}
rdr.
Close
();
theFile.
Close
();
Reading and Writing Files
StreamWriter class
Kế thừa TextWriter class
Dùng để ghi các file văn bản
Thuộc tính
Reading and Writing Files
StreamWriter class
Phương thức
Reading and Writing Files
Ví dụ
Ghi file văn bản
FileStream
theFile =
File.Open
(@"c:\somefile.txt",
FileMode.OpenOrCreate,
FileAccess.Write
);
StreamWriter
writer = new
StreamWriter
(theFile);
writer.WriteLine("Hello");
writer.
Close
();
theFile.
Close
();
Reading and Writing Files
BinaryReader class
Dùng để đọc file nhị phân
Cung cấp các phương thức có dạng
ReadXXX(ReadByte, ReadInt32…)
để
đọc nội dung file.
Reading and Writing Files
Ví dụ
Đọc file nhị phân
FileStream
theFile =
File.Open
(@"c:\somefile.bin",
FileMode.Open);
BinaryReader
reader = new
BinaryReader
(theFile);
long number = reader.
ReadInt64
();
byte[] bytes = reader.
ReadBytes
(4);
string s = reader.
ReadString
();
Reading and Writing Files
BinaryWriter class
Dùng để ghi file nhị phân
Cung cấp các phương thức
Write
với
nhiều dạng tham số khác nhau để ghi
nội dung file.
Reading and Writing Files
Ví dụ
Ghi file nhị phân
FileStream
theFile =
File.Open
(@"c:\somefile.bin",
FileMode.OpenOrCreate, FileAccess.Write
);
BinaryWriter
writer = new
BinaryWriter
(theFile);
long number = 100;
byte[] bytes = new byte[] { 10, 20, 50, 100 };
string s = “Toi di hoc";
writer.
Write
(number);
writer.
Write
(bytes);
writer.
Write
(s);
Reading and Writing Files
MemoryStream class:
kế thừa Stream
class
Thuộc tính
Phương thức
Reading and Writing Files
Ví dụ
MemoryStream
memStrm = new
MemoryStream
();
StreamWriter
writer = new
StreamWriter
(memStrm);
writer.
WriteLine
("Hello");
writer.
WriteLine
("Goodbye");
writer.
Flush
();
FileStream
theFile =
File.Create
(@"c:\inmemory.txt");
memStrm.
WriteTo
(theFile);
Reading and Writing Files
BufferedStream class
Thường dùng cho NetworkStream
Tăng hiệu quả đọc/ghi dữ liệu
FileStream
newFile =
File.Create
(@"c:\test.txt");
BufferedStream buffered =
new BufferedStream(newFile);
StreamWriter
writer =
new
StreamWriter
(buffered);
writer.
WriteLine
("Some data");
Compressing Streams
Cho phép nén dữ liệu gốc tối đa là
4GB
Kiểu nén: GZIP và DEFLATE
Các lớp hỗ trợ
GZipStream class
DeflateStream class
Compressing Streams
GZipStream class
Kế thừa Stream class
Dùng để nén/giải nén tập tin theo GZIP
Nén tập tin
FileStream
sourceFile =
File.OpenRead
(inFilename);
FileStream
destFile =
File.Create
(outFilename);
GZipStream compStream = new
GZipStream(sourceFile,
CompressionMode.Compress);
byte[] Arr = new byte[4096];
int theByte = sourceFile.
Read
(Arr, 0, 4096);
while(theByte!=0)
{
compStream.
Write
(Arr, 0, theByte);
theByte = sourceFile.
Read
(Arr, 0, 4096);
}
Compressing Streams
GZipStream class
Giải nén tập tin
FileStream
sourceFile =
File.OpenRead
(inFilename);
FileStream
destFile =
File.Create
(outFilename);
GZipStream compStream = new
GZipStream(sourceFile,
CompressionMode.Decompress);
byte[] Arr = new byte[4096];
int theByte = compStream.
Read
(Arr, 0, 4096);
while (theByte != 0)
{
destFile.
Write
(Arr, 0, theByte);
theByte = compStream.
Read
(Arr, 0, 4096);
}
Compressing Streams
DeflateStream class
Kết hợp giữa LZ77 và Huffman
Dùng tương tự như GZipStream class
Cho kích thước nén nhỏ hơn
File nén không thể mở được bằng các
chương trình giải nén khác.
Q&A
Cám ơn các bạn đã theo dõi!