实验四
实验目的
1. 熟悉文件的基本功能和综合应用方法。
实验内容
①实验8-1:
跟着学习
试做【例8.6】,模仿制作Windows资源管理器。
【例8.6】仿制Windows资源管理器
(1)新建WinForm项目
新建WinForm项目并命名为shiyan4。
(2)添加控件并设置属性
●在Form1的设计视图中将此窗体调整到适当的大小,并将Text属性设为“资源管理器”
●向主窗体中添加主菜单控件 MenuStrip,其名称为maiMenu。它包含三个顶级菜单:文件、目录和视图,并完成它们的结构。
●向主窗体中添加工具栏控件 ToolStrip,然后添加一个标签控件和一个文本框控件。标签控件的标题为“路径:”,文本框控件的名称为txtPath。
●添加一个ImageList 控件,设置其Images属性,在弹出的“图像集合编辑器”对话框中添加成员。
●向主窗体左侧添加一个树视图控件TreeView,命名为tvDir,将其Anchor属性设置为Top、Bottom、Left,ImageList属性选择为imageListl。
●向主窗体右侧添加一个列表视图控件ListView,命名为lvFiles,将其Anchor属性设置为 Top、Bottom、Left、Right,LargeImageList属性选择为 imageListl,然后用列表视图的Columns 属性打开“ColumnHeader集合编辑器”对话框,添加4列(名称、大小、类型和修改时间),如图所示。
添加命名空间
using System.IO;
功能实现
●获取驱动盘符
private void Form1_Load(object sender, EventArgs e)
{
ListDrives();
}
ListDrives()方法代码如下:
private void ListDrives()
{
TreeNode tn;
string[] drives = Directory.GetLogicalDrives();
tvDir.BeginUpdate();
for(int i=0;i<drives.Length;i++)
{
tn = new TreeNode(drives[i], 0, 0);
tvDir.Nodes.Add(tn);
}
tvDir.EndUpdate();
tvDir.SelectedNode = tvDir.Nodes[0];
}
运行程序,获得本地逻辑盘符
●展开目录树
切换到设计视图,添加tvDir的NodeMouseDoubleClick事件:
private void tvDir_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e)
{
ListDirs(e.Node, txtPath.Text.Trim());
}
ListDirs方法代码如下:
private void ListDirs(TreeNode tn, string strDir)
{
if(nDirLevel>4)
{
nDirLevel = 0;
return;
}
nDirLevel++;
string[] arrDirs;
TreeNode tmpNode;
try
{
arrDirs = Directory.GetDirectories(strDir);
if (arrDirs.Length == 0) return;
for(int i=0;i<arrDirs.Length;i++)
{
tmpNode = new TreeNode(Path.GetFileName(arrDirs[i]), 1, 2);
ListDirs(tmpNode, arrDirs[i]);
tn.Nodes.Add(tmpNode);
}
}
catch
{
return;
}
}
完成之后,再次运行程序,双击某个盘符,系统就会自动加载其下的目录树
●浏览指定目录下的内容
private void tvDir_AfterSelect(object sender, TreeViewEventArgs e)
{
txtPath.Text = tvDir.SelectedNode.FullPath;
ListDirsAndFiles(tvDir.SelectedNode.FullPath);
}
其中ListDirsAndFiles()方法如下
private void ListDirsAndFiles(string strDir)
{
ListViewItem lvi;
int nImgIndex;
string[] items = new string[4];
string[] dirs;
string[] files;
try
{
dirs = Directory.GetDirectories(@strDir);
files = Directory.GetFiles(@strDir);
}
catch
{
return;
}
lvFiles.BeginUpdate();
lvFiles.Clear();
lvFiles.Columns.AddRange(new ColumnHeader[] { chName, chSize, chType, chTime });
for(int i = 0; i < dirs.Length; i++)
{
items[0] = Path.GetFileName(dirs[i]);
items[1] = "";
items[2] = "文件夹";
items[3] = Directory.GetLastWriteTime(dirs[i]).ToLongDateString() + "" + Directory.GetLastWriteTime(dirs[i]).ToLongTimeString();
lvi = new ListViewItem(items, 1);
lvFiles.Items.Add(lvi);
}
for(int i=0;i<files.Length;i++)
{
string ext = (Path.GetExtension(files[i])).ToLower();
switch(ext)
{
case ".doc":
nImgIndex = 3;
break;
case ".docx":
nImgIndex = 4;
break;
case ".txt":
nImgIndex = 5;
break;
case ".rar":
nImgIndex = 6;
break;
case ".zip":
nImgIndex = 7;
break;
case ".html":
nImgIndex = 8;
break;
case ".exe":
nImgIndex = 9;
break;
case ".jpg":
nImgIndex = 10;
break;
}
items[0] = Path.GetFileName(files[i]);
FileInfo fi = new FileInfo(files[i]);
items[1] = fi.Length.ToString();
items[2] = ext + "文件";
items[3] = fi.LastWriteTime.ToLongDateString() + "" + fi.LastWriteTime.ToLongTimeString();
lvi = new ListViewItem(items, nImgIndex);
lvFiles.Items.Add(lvi);
}
lvFiles.EndUpdate();
}
●双击打开文件夹
private void lvFiles_DoubleClick(object sender,EventArgs e)
{
txtPath.Text = txtPath.Text.Trim() + "\\" + lvFiles.SelectedItems[0].Text;
ListDirsAndFiles(txtPath.Text.Trim());
}
(5)运行程序
自己练习
完善这个程序,试着添加新功能,比如,选择“视图”→“详细资料”,以详细信息列表的方式显示目录下的内容.
代码如下:
private void miDetail_Click(object sender, EventArgs e)
{
lvFiles.View = View.Details;
lvFiles.Columns[0].Text = "名称";
lvFiles.Columns[1].Text = "大小";
lvFiles.Columns[2].Text = "类型";
lvFiles.Columns[3].Text = "修改日期";
}
实验截图:
实验总结
通过本次实验更加熟悉了文件的基本功能和综合应用方法,也学习到了一些新的只是。将课本知识与实践相结合,及时发现自身的不足之处,并通过学习和查找资料解决问题,把书本知识转换到实际能力,提高了对知识的认识和掌握。