File , Thư mục và IO phần 4

Chia sẻ: Nghia Bui Tuan | Ngày: | Loại File: PDF | Số trang:7

0
66
lượt xem
16
download

File , Thư mục và IO phần 4

Mô tả tài liệu
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

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.

Chủ đề:
Lưu

Nội dung Text: File , Thư mục và IO phần 4

  1. 1.1 Xác định đường dẫn tương ứng với một file hay thư mục 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
  2. 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'
  3. 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 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);
  4. Console.ReadLine(); } } 1.4 Lấy dung lượng đĩa còn trống 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). The image part with relationship ID rId5 was not found in the file. 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 {
  5. [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 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 file và đườ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 file và thiết lập thuộc tính CheckFileExists để kiểm tra tính hợp lệ (xem hình 9.3). [
  6. The image part with relationship ID rId6 was not found in the file. Hình 9.3 OpenFileDialog • SaveFileDialog—cho phép người dùng chỉ định một file mới. Tên file và đườ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 file và 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). The image part with relationship ID rId7 was not found in the file. Hình 9.4 FolderBrowserDialog
  7. 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ài liệu vào một RichTextBox, sửa nội dung, và lưu tài liệu đã được sửa (sử dụng lớp OpenFileDialog và SaveFileDialog để mở và lưu tài liệu).
Đồng bộ tài khoản