C#第三版+郑阿奇 实验8-1

实验四

  1. 实验目的

1. 熟悉文件的基本功能和综合应用方法。

  1. 实验内容

①实验8-1:

  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列(名称、大小、类型和修改时间),如图所示。

  1. 添加命名空间

using System.IO;

  1. 功能实现

●获取驱动盘符

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)运行程序

  1. 自己练习

完善这个程序,试着添加新功能,比如,选择“视图”→“详细资料”,以详细信息列表的方式显示目录下的内容.

代码如下:

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 = "修改日期";

}

实验截图:

  1. 实验总结

通过本次实验更加熟悉了文件的基本功能和综合应用方法,也学习到了一些新的只是。将课本知识与实践相结合,及时发现自身的不足之处,并通过学习和查找资料解决问题,把书本知识转换到实际能力,提高了对知识的认识和掌握。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值