Tải bản đầy đủ (.pdf) (8 trang)

Tạo Ứng dụng Duyệt File và thư mục đơn giản với C Sharp

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (135.9 KB, 8 trang )

Tạo Ứng dụng Duyệt File và thư mục đơn giản với C Sharp

Bài viết này giới thiệu cách lấy các thông tin của các Ổ
đĩa hệ thống và cách lấy thông tin về các thư mục và File
để phân bố vào các điều khiển Treeview và listview. Đây
là một ứng dụng đơn giản của WinForm.
Trước hết, ta cần thu thập tất cả các thông tin về tất cả
các Ổ đĩa trong My Computer mà chúng ta có thể truy
cập vào và hiển thị tên là loại Ổ trong điều khiển
Treeview. Chúng ta có thể truy vấn thông qua
lớp ManagementObjectSearcher trong không gian tên
System.Management. Nó chấp nhận các câu lệnh SQL
Như thực hiện các câu truy vấn và trả về một đối tượng
ManagementOjbectCollection mà chứa tất cả các thông tin về Ổ đĩa mà chúng ta yêu cầu. bây
giờ chúng ta đã có tất cả các thông tin về Ổ đĩa như: Tên Ổ đĩa, Loại, các mô tả... Ta viết hàm
GetDrivers() để thực thi mục đích đó:
protected ManagementObjectCollection GetDrivers()
{
ManagementObjectSearcher query = new ManagementObjectSearcher("Select * From
Win32_LogicalDisk");
ManagementObjectCollection queryCollection = query.Get();

return queryCollection;
}
Khi ứng dụng được nạp lên chúng ta cần phải tìm tất cả các Ổ đĩa có trong My Computer và hiển
thị chúng.
private void PopulateDriveList()
{
TreeNode nodeTreeNode;
int imageIndex = 0;
int selectIndex = 0;



const int Removable = 2;
const int LocalDisk = 3;
const int Network = 4;
const int CD = 5;

this.Cursor = Cursors.WaitCursor;
// Xóa Treeview
tvFolders.Nodes.Clear();
nodeTreeNode = new TreeNode("My Computer", 0, 0);
tvFolders.Nodes.Add(nodeTreeNode);

// Thiết lập tập hợp các Node
TreeNodeCollection nodeCollection = nodeTreeNode.Nodes;

// Lấy danh sách các ổ đĩa
ManagementObjectCollection queryCollection = GetDrivers();

foreach (ManagementObject mo in queryCollection)
{
switch (int.Parse(mo["DriveType"].ToString()))
{
case Removable: // Các Ổ Đĩa Mềm
imageIndex = 5;
selectIndex = 5;
break;
case LocalDisk: // Các Ổ Đĩa Cứng
imageIndex = 6;
selectIndex = 6;
break;

case CD: // Các Ổ Đĩa CD
imageIndex = 7;
selectIndex = 7;
break;
case Network: // Các Ổ Liên Kết qua mạng
imageIndex = 8;
selectIndex = 8;
break;
default:
imageIndex = 2;
selectIndex = 3;
break;
}
// Tạo một Driver Node mới
nodeTreeNode = new TreeNode(mo["Name"].ToString() + "\\", imageIndex,
selectIndex);

// Chèn vào Treeview
nodeCollection.Add(nodeTreeNode);

}

InitListView();
this.Cursor = Cursors.Default;

}
Và khởi tạo một Listview để hiển thị các thông tin về File trong Hàm InitListView():
protected void InitListView()
{
// Khởi tạo Listview ban đầu

lvFiles.Clear();
//// Tạo các header cho Listview
lvFiles.Columns.Add("Tên File", 140, HorizontalAlignment.Left);
lvFiles.Columns.Add("Dung Lượng", 75, HorizontalAlignment.Right);
lvFiles.Columns.Add("Ngày Tạo", 140, HorizontalAlignment.Right);
lvFiles.Columns.Add("Ngày Sửa", 140, HorizontalAlignment.Right);
}
Khi chúng ta chọn một Ổ đĩa hoặc 1 thư mục trong Treeview, chúng ta cần kiểm tra xem Ổ đĩa
hay thư mục đó có tồn tại hay không trước khi thực hiện các thao tác khác. Sau khi kiểm tra sự
tồn tại của các thư mục trong Ổ đĩa, ta lấy tất cả các thư mục tồn tại khi chọn một Ổ đĩa trong
Treeview bằng cách sử dụng lớp Directory trong không gian tên System.IO. Gọi hàm
Directory.GetDirectories với tham số là đường dẫn của Node hiện thời và trả về một mảng các
thư mục. chúng ta duyệt tất cả các thư mục trong mảng này và phân bố chúng vào các Node con.
Hàm xử lý sự kiện nhấn và Treeview như sau:
private void tvFolders_AfterSelect(object sender, TreeViewEventArgs e)
{
// Phân bố thư mục hoặc File khi một thư mục được chọn
this.Cursor = Cursors.WaitCursor;

// Lấy ổ đĩa hoặc thư mục đang được lựa chọn
TreeNode currentNode = e.Node;

// Xóa toàn bộ thư mục con
currentNode.Nodes.Clear();

if (currentNode.SelectedImageIndex == 0)
{
// My Computer được chọn - Phân bố lại danh sách các ổ đĩa.
PopulateDriveList();
}

else
{
// Phân bố các thư mục con và các File.
PopulateDirectory(currentNode, currentNode.Nodes);
}
this.Cursor = Cursors.Default;

}
Chúng ta kiểm tra xem Mục My Computer đã được mở rộng hay chưa? nếu chưa thì ta phải gọi
hàm để phân bố danh sách các ổ đĩa. Còn ngược lại, ta duyệt tiếp các thư mục ở cấp độ nhỏ hơn
bằng hàm PopulateDirectory(currentNode, currentNode.Nodes):
protected void PopulateDirectory(TreeNode currentNode, TreeNodeCollection
currentNodeCollection)
{
TreeNode nodeDir;
int imageIndex = 2; // Chỉ mục ảnh khi không được chọn
int selectIndex = 3; // Chỉ mục ảnh khi được chọn.

if (currentNode.SelectedImageIndex != 0)
{
// phân bố các thư mục trong Treeview
try
{
// Kiểm tra đường dẫn
if (Directory.Exists(GetFullPath(currentNode.FullPath)) == false)
{
MessageBox.Show("Ổ đĩa hoặc thư mục " + currentNode.ToString() + " Không
tồn tại");
}
else

{
//Phân bố các Files.
PopulateFiles(currentNode);

string[] stringDirectories =
Directory.GetDirectories(GetFullPath(currentNode.FullPath));
string stringFullPath = "";
string stringPathName = "";

// Lặp qua tất cả các thư mục
foreach (string stringDir in stringDirectories)
{
stringFullPath = stringDir;
stringPathName = GetPathName(stringDir);

// Tạo các Node cho thư mục
nodeDir = new TreeNode(stringPathName.ToString(), imageIndex,
selectIndex);
currentNodeCollection.Add(nodeDir);
}
}
}
catch (IOException e)
{
MessageBox.Show("Lỗi: Ổ đĩa không có hoặc thư mục không tồn tại.");
}
catch (UnauthorizedAccessException e)
{
MessageBox.Show("Lỗi: Bạn không có quyền truy cập vào ổ đĩa hoặc thư mục
này");

}
catch (Exception e)
{
MessageBox.Show("Lỗi " + e);
}
}
}
Đến bước này, chúng ta vừa duyệt các thư mục con và hiển thị các File ra Listview. Chúng ta
viết Hàm PopulateFiles(TreeNode currentNode) để thực hiện điều này. Trong đó ta có sử dụng
hàm Directory.GetFiles với tham số là đường dẫn của Node hiện thời. hàm này sẽ trả về một
mảng các File trong Ổ đĩa hoặc thư mục lựa chọn. Ta duyệt qua tất cả các phần tử mảng và phân
bố vào Listview. Lớp FileInfo lấy các thông tin chi tiết về File như Dung lượng, ngày tạo, ngày
sửa đổi...
protected void PopulateFiles(TreeNode currentNode)
{
string[] lvData = new string[4];

InitListView();

if (currentNode.SelectedImageIndex != 0)
{
// Kiểm tra đường dẫn
if (Directory.Exists(GetFullPath(currentNode.FullPath)) == false)
{
MessageBox.Show("Thư mục hoặc đường dẫn" + currentNode.ToString() + "Không
tồn tại");
}
else
{
try

{
string[] stringFiles = Directory.GetFiles(GetFullPath(currentNode.FullPath));
string stringFileName = null;
DateTime dtCreateDate, dtModifyDate;
Int64 lFileSize = 0;

// Duyệt tất cả các File.

×