1.1 Xác định đường dẫn tương ứng với một file hay thưmục
V
V
Bạn có một đường dẫn (ở dạng chuỗi), và cần xác định nó tương ứng với một
thư mục hay một file.
#
#
Kiểm tra đường dẫn với phương thức Directory.Exists và File.Exists.
Cả hai lớp System.IO.Directory và System.IO.File đều có phương thức Exists.
• Directory.Exists—trả về true nếu đường dẫn (tương đối hoặc tuyệt đối) tương ứng
với một thưmục đang tồn tại.
• File.Exists—trả về true nếu đường dẫn tương ứng với một file đang tồn tại.
Sử dụng hai phương th
ức này, bạn có thể nhanh chóng xác định một đường dẫn có tương
ứng với một file hay thưmục hay không, như ví dụ sau:
using System;
using System.IO;
public class FileOrPath {
private static void Main(string[] args) {
foreach (string arg in args) {
Console.Write(arg);
if (Directory.Exists(arg)) {
Console.WriteLine(" is a directory");
}
else if (File.Exists(arg)) {
Console.WriteLine(" is a file");
}
else {
Console.WriteLine(" does not exist");
}
}
Console.ReadLine();
}
}
1.2 Làm việc với đường dẫn tương đối
V
V
Bạn cần thiết lập thưmục làm việc hiện hành để có thể sử dụng đường dẫn
tương đối trong mã lệnh của bạn.
#
#
Sử dụng phương thức tĩnh GetCurrentDirectory và SetCurrentDirectory của
lớp System.IO.Directory.
Đường dẫn tương đối tự động được diễn dịch dựa trên quan hệ với thưmục hiện hành.
Bạn có thể lấy thưmục hiện hành bằng phương thức Directory.GetCurrentDirectory hoặc
thay đổi nó bằng phương thức Directory.SetCurrentDirectory. Ngoài ra, bạn có thể sử
dụng phương thức tĩnh GetFullPath của lớp System.IO.Path để chuyển đường d
ẫn tương
đối thành đường dẫn tuyệt đối.
Dưới đây là một ví dụ minh họa:
using System;
using System.IO;
public class RelativeDirTest {
private static void Main() {
Console.WriteLine("Using: " + Directory.GetCurrentDirectory());
Console.WriteLine("The relative path 'file.txt' " +
"will automatically become: '" +
Path.GetFullPath("file.txt") + "'");
Console.WriteLine();
Console.WriteLine("Changing current directory to C:\\");
Directory.SetCurrentDirectory("C:\\");
Console.WriteLine("Now the relative path 'file.txt' " +
"will automatically become '" +
Path.GetFullPath("file.txt") + "'");
Console.ReadLine();
}
}
Kết xuất của ứng dụng này có thể như sau (nếu bạn chạy ứng dụng trong thưmục
C:\Temp):
Using: C:\Temp
The relative path 'file.txt' will automatically become 'C:\Temp\file.txt'
Changing current directory to C:\
The relative path 'file.txt' will automatically become 'C:\file.txt'
# Nếu sử dụng đường dẫn tương đối, bạn nên thiết lập thưmục làm việc khi bắt
đầu tương tác với file. Nếu không, có thể ảnh hưởng đến sự an toàn của hệ
thống nếu người dùng cố ý thay đổi thưmục làm việc để ứng dụng của bạn
truy xuất hoặc ghi đè file hệ thống.
1.3 Tạo file tạm
V
V
Bạn cần tạo một file sẽ được đặt trong thưmục tạm của người dùng cụ thể và
sẽ có tên duy nhất, để nó không đụng độ với các file tạm được sinh ra bởi các
chương trình khác.
#
#
Sử dụng phương thức tĩnh GetTempFileName của lớp System.IO.Path, phương
thức này trả về một đường dẫn kết hợp đường dẫn đến thưmục tạm với một
tên file được tạo nhẫu nhiên.
Có nhiều cách để tạo file tạm. Trong các trường hợp đơn giản, bạn chỉ cần tạo một file
trong thưmục ứng dụng, có thể sử dụng một
GUID hoặc một tem thời gian kết hợp với
một giá trị ngẫu nhiên làm tên file. Tuy nhiên, lớp Path hỗ trợ một phương thức giúp bạn
đỡ tốn công hơn. Nó sẽ tạo ra một file với tên duy nhất trong thưmục tạm của người
dùng hiện hành, chẳng hạn C:\Documents and Settings\username\Local
Settings\Temp\tmpac9.tmp.
using System;
using System.IO;
public class TemporaryFile {
private static void Main() {
string tempFile = Path.GetTempFileName();
Console.WriteLine("Using " + tempFile);
FileStream fs = new FileStream(tempFile, FileMode.Open);
// (Ghi dữ liệu.)
fs.Close();
// Xóa file.
File.Delete(tempFile);
Console.ReadLine();
}
}
1.4 Lấy dung lượng đĩa còn trống
V
V
Bạn cần xét một ổ đĩa và xác định còn bao nhiêu byte trống.
#
#
Sử dụng hàm không-được-quản-lý Win32 API GetDiskFreeSpaceEx, (hàm này
được khai báo trong kernell32.dll).
Không lớp nào trong các lớp về hệ thống file của .NET cho phép xác định dung lượng đĩa
còn trống. Tuy nhiên, bạn có thể dễ dàng lấy được thông tin này bằng hàm Win32 API
GetDiskFreeSpaceEx. Hàm này sẽ trả về dung lượng tổng cộng, dung lượng còn trống, và
dung lượng còn trống có thể sử dụng được (nhà quản trị có thể sử dụng Disk Quota
Management để hạn chế dung lượ
ng mà người dùng có thể sử dụng được).
Hình 9.2 Disk Quota Management
Ứng dụng Console dưới đây minh họa kỹ thuật này:
using System;
using System.Runtime.InteropServices;
public class GetFreeSpace {
The image part with relationsh ip ID rId 5 was not fo und in the file.
[DllImport("kernel32.dll", EntryPoint="GetDiskFreeSpaceExA" )]
private static extern long GetDiskFreeSpaceEx(
string lpDirectoryName, out long lpFreeBytesAvailableToCaller,
out long lpTotalNumberOfBytes, out long lpTotalNumberOfFreeBytes);
private static void Main() {
long result, total, free, available;
result = GetDiskFreeSpaceEx("c:", out available, out total,
out free);
if (result != 0) {
Console.WriteLine("Total Bytes: {0:N}", total);
Console.WriteLine("Free Bytes: {0:N}", free);
Console.WriteLine("Available Bytes: {0:N}", available);
}
Console.ReadLine();
}
}
1.5 Hiển thị các hộp thoại file
V
V
Bạn cần hiện các hộp thoại Windows chuẩn để mở, lưu file, và để chọn thư mục.
#
#
Sử dụng các lớp OpenFileDialog, SaveFileDialog, và FolderBrowserDialog
thuộc không gian tên System.Windows.Forms. Gọi phương thức ShowDialog
để hiển thị hộp thoại, xét giá trị trả về để xác định người dùng đã nhấn OK hay
Cancel, và lấy thông tin từ thuộc tính FileName hay SelectedPath.
.NET cung cấp các đối tượng bọc lấy nhiều hộp thoại Windows chuẩn, bao gồm các hộp
thoại dùng để mở và lưu file, và để chọn thư mục. Tất cả các lớ
p này đều thừa kế từ
System.Windows.Forms.CommonDialog, bao gồm:
• OpenFileDialog—cho phép người dùng chọn một file. Tên filevà đường dẫn có thể
được lấy từ thuộc tính FileName (hay tập hợp FileNames, nếu bạn cho phép chọn
nhiều file bằng cách thiết lập Multiselect là true). Ngoài ra, bạn có thể sử dụng thuộc
tính Filter để chọn định dạng filevà thiết lập thuộc tính CheckFileExists để kiểm tra
tính hợp lệ (xem hình 9.3).
[
Hình 9.3 OpenFileDialog
• SaveFileDialog—cho phép người dùng chỉ định một file mới. Tên filevà đường dẫn
có thể được lấy từ thuộc tính FileName. Bạn có thể sử dụng thuộc tính Filter để
chọn định dạng filevà thiết lập các thuộc tính CreatePrompt và OverwritePrompt để
hiển thị thông báo xác nhận khi người dùng chọn một file mới hay file đã tồn tại.
• FolderBrowserDialog—cho phép người dùng chọn (và tạo) một thư mục. Đường
dẫn đ
ã chọn có thể được lấy từ thuộc tính SelectedPath. Ngoài ra, bạn có thể thiết
lập thuộc tính ShowNewFolderButton để hiển thị nút Make New Folder (xem hình
9.4).
Hình 9.4 FolderBrowserDialog
The image part with relationsh ip ID rI d6 was not fo und in the file.
The image part with relationsh ip ID rI d7 was not fo und in the file.
Khi sử dụng OpenFileDialog hay SaveFileDialog, bạn cần thiết lập chuỗi lọc (chỉ định
các phần mở rộng được phép). Chuỗi lọc được phân cách bởi ký tự "|" theo định dạng:
"[Nhãn] | [Danh sách các phần mở rộng được phân cách bởi dấu chấm phẩy] | [Nhãn] |
[Danh sách các phần mở rộng được phân cách bởi dấu chấm phẩy] | ". Bạn cũng có thể
thiết lập thuộc tính Title (tiêu đề) và InitialDirectory (th
ư mục ban đầu).
Ứng dụng dưới đây cho phép người dùng nạp tàiliệu vào một RichTextBox, sửa nội
dung, và lưu tàiliệu đã được sửa (sử dụng lớp OpenFileDialog và SaveFileDialog để mở
và lưu tài liệu).
. thoại file
V
V
Bạn cần hiện các hộp thoại Windows chuẩn để m , lưu file, và để chọn thư mục.
#
#
Sử dụng các lớp OpenFileDialog, SaveFileDialog, và. + tempFile);
FileStream fs = new FileStream(tempFile, FileMode.Open);
// (Ghi dữ liệu. )
fs.Close();
// Xóa file.
File. Delete(tempFile);