1. Trang chủ
  2. » Công Nghệ Thông Tin

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

8 673 2
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Tạo ứng dụng duyệt file và thư mục đơn giản với C Sharp
Thể loại Bài viết
Định dạng
Số trang 8
Dung lượng 135,9 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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

Trang 1

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);

Trang 2

// 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;

}

Trang 3

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;

}

Trang 4

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)

Trang 5

{

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

Trang 6

foreach (string stringFile in stringFiles)

{

stringFileName = stringFile;

FileInfo objFileSize = new FileInfo(stringFileName);

lFileSize = objFileSize.Length;

dtCreateDate = objFileSize.CreationTime;

dtModifyDate = objFileSize.LastWriteTime;

// Ghi dữ liệu vào Listview

lvData[0] = GetPathName(stringFileName);

lvData[1] = FormatSize(lFileSize);

lvData[2] = FormatDate(dtCreateDate);

lvData[3] = FormatDate(dtModifyDate);

ListViewItem lvItem = new ListViewItem(lvData, 0);

lvFiles.Items.Add(lvItem);

}

}

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);

}

}

}

}

Tuy nhiên, ta cần phải chú ý đến định đạng kích cỡ của File là kiểu số Phải có một hàm chuyển đổi và làm tròn các giá trị đó Ta cần áp dụng lớp NumberFormatInfo trong không gian tên System.Globalization để định dạng các con số và chuyển sang định dạng chuỗi:

protected string FormatSize(Int64 lSize)

{

Trang 7

string stringSize = "";

NumberFormatInfo myNfi = new NumberFormatInfo();

Int64 lKBSize = 0;

if (lSize < 1024)

{

if (lSize == 0)

{

stringSize = "0";

}

else

stringSize = "1"; // Dung Lượng lớn hơn 0 và nhỏ hơn 1024 làm tròn thành 1 KB }

else

{

lKBSize = lSize / 1024;

// Chuyển sang định dạng chuẩn

stringSize = lKBSize.ToString("n",myNfi);

// Cắt bỏ phần thập phân

stringSize = stringSize.Replace(".00", "");

}

return stringSize + " KB";

}

Còn một số hàm đơn giản nữa như định dạng thời gian cho File

protected string FormatDate(DateTime dtDate)

{

string stringDate = "";

stringDate = dtDate.ToShortDateString().ToString() + " " +

dtDate.ToShortTimeString().ToString();

return stringDate;

}

Hàm Lấy Tên và đường dẫn của thư mục:

protected string GetPathName(string stringPath)

{

string[] stringSplit = stringPath.Split('\\');

int _maxIndex = stringSplit.Length;

return stringSplit[_maxIndex - 1];

}

Trang 8

protected string GetFullPath(string stringPath)

{

string stringParse = "";

// Xóa bỏ My Computer khỏi đường dẫn

stringParse = stringPath.Replace("My Computer\\", "");

return stringParse;

}

 

Ngày đăng: 19/10/2013, 18:15

TỪ KHÓA LIÊN QUAN

w