实验四  文件操作

一、实验目的

1. 掌握窗口控件的使用方法;

2. 掌握文件系统的操作方法、File 类和 Directory类的使用。

二、实验要求

根据要求,编写 C#程序,并将程序代码和运行结果写入实验报告。

三、实验内容

1.编写一个简易的文件管理器,通过本次实验,练习 TreeView、ListView 和

SplitContainer 控件的使用,同时熟悉 C#文件系统的操作方法以及 File 类和 Directory类的使用。

(1)新建 windows 应用程序。

(2)将窗体 Form 的 Text 属性设置为“简易的文件管理器”。

(3)窗体上添加 SplitContainer、TreeView、ListView 控件,设置属性。将 TreeView 控

件的 Dock 属性设置为 Left,ListView 控件的 Dock 属性设置为 Fill,MultiSelect 属性设置为False,View 属性设置为 List。

(4)在 Form1.cs 中,添加对命名空间 using System.IO 的引用。

(5)在 Form1 的构造函数中添加代码:

public Form1()

{

InitializeComponent();

TreeNode myComputerNode = new TreeNode("我的电脑");             treeView1.Nodes.Add(myComputerNode);             listViewShow(myComputerNode);

}

(6)编写 ListView 控件的方法 listViewShow(TreeNode dirNode)。

private void listViewShow(TreeNode dirNode)

{

listView1.Clear();

if (dirNode.Parent == null)

{

foreach (string DrvName in Directory.GetLogicalDrives())

{

ListViewItem aItem = new ListViewItem(DrvName);

listView1.Items.Add(aItem);

}

}

else

{

foreach (string DirName in Directory.GetDirectories((string)dirNode.Tag))

{

ListViewItem aItem = new ListViewItem(DirName);

listView1.Items.Add(aItem);

}

foreach (string fileName in Directory.GetFiles((string) dirNode.Tag))

{

ListViewItem aItem=new ListViewItem(fileName);

listView1.Items.Add(aItem);

}

}

}

(7)编写 listViewShow 的重载方法。

private void listViewShow(string dirName)

{

listView1.Clear();

try

{

foreach (string DirName in Directory.GetDirectories(dirName))

{

ListViewItem aItem = new ListViewItem(DirName);

listView1.Items.Add(aItem);

}

foreach (string fileName in Directory.GetFiles(dirName))

{

ListViewItem aItem = new ListViewItem(fileName);

listView1.Items.Add(aItem);

}

}

catch

{

}

}

(8)编写 DirTreeShow(TreeNode dirNode)方法。

private void DirTreeShow(TreeNode dirNode)

{

try

{

if (dirNode.Nodes.Count == 0)

{

if (dirNode.Parent == null)

{

foreach (string DrvName in Directory.GetLogicalDrives())

{

TreeNode  aNode= new TreeNode(DrvName);

aNode.Tag=DrvName;

dirNode.Nodes.Add(aNode);

}

}

else

{

foreach(string DirName in Directory.GetDirectories((string)dirNode.Tag))

{

TreeNode  aNode=new TreeNode(DirName);

aNode.Tag=DirName;

dirNode.Nodes.Add(aNode);

}

}

}

}

Catch

{

}

}

(9)编写 TreeView 控件的 AfterSelect 事件代码。

private void  treeView1_AfterSelect_1(object sender, TreeViewEventArgs e)

{

listViewShow(e.Node);

DirTreeShow(e.Node);

}

(10)编写 ListView 控件的 DoubleClick 事件代码。

private void  listView1_DoubleClick(object sender, EventArgs e)

{

foreach (int listIndex in listView1.SelectedIndices)

{

listViewShow(listView1.Items[listIndex].Text);

}

}

(11)单击启动调试工具,运行结果参见下图。

(12)运行截图

(13)源程序代码

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Windows.Forms;

using System.IO;

namespace WinFormsApp1

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

TreeNode myComputerNode = new TreeNode("我的电脑");

treeView1.Nodes.Add(myComputerNode);

listViewShow(myComputerNode);

DirTreeShow(myComputerNode);

}

private void Form1_Load(object sender, EventArgs e)

{

}

private void listView1_SelectedIndexChanged(object sender, EventArgs e)

{

}

//编写 ListView 控件的方法 listViewShow(TreeNode dirNode)。

private void listViewShow(TreeNode dirNode)

{

listView1.Clear();

if (dirNode.Parent == null)

{

foreach (string DrvName in Directory.GetLogicalDrives())

{

ListViewItem aItem = new ListViewItem(DrvName);

listView1.Items.Add(aItem);

}

}

else

{

foreach (string DirName in Directory.GetDirectories((string)dirNode.Tag))

{

ListViewItem aItem = new ListViewItem(DirName);

listView1.Items.Add(aItem);

}

foreach (string fileName in Directory.GetFiles((string)dirNode.Tag))

{

ListViewItem aItem = new ListViewItem(fileName);

listView1.Items.Add(aItem);

}

}

}

//编写 listViewShow 的重载方法。

private void listViewShow(string dirName)

{

listView1.Clear();

try

{

foreach (string DirName in Directory.GetDirectories(dirName))

{

ListViewItem aItem = new ListViewItem(DirName);

listView1.Items.Add(aItem);

}

foreach (string fileName in Directory.GetFiles(dirName))

{

ListViewItem aItem = new ListViewItem(fileName);

listView1.Items.Add(aItem);

}

}

catch

{

}

}

//DirTreeShow(TreeNode dirNode)方法。

private void DirTreeShow(TreeNode dirNode)

{

try

{

if (dirNode.Nodes.Count == 0)

{

if (dirNode.Parent == null)

{

foreach (string DrvName in Directory.GetLogicalDrives())

{

TreeNode aNode = new TreeNode(DrvName);

aNode.Tag = DrvName;

dirNode.Nodes.Add(aNode);

}

}

else

{

foreach (string DirName in Directory.GetDirectories((string)dirNode.Tag))

{

TreeNode aNode = new TreeNode(DirName);

aNode.Tag = DirName;

dirNode.Nodes.Add(aNode);

}

}

}

}

catch

{

}

}

//编写 TreeView 控件的 AfterSelect 事件代码。

private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)

{

listViewShow(e.Node);

DirTreeShow(e.Node);

}

//编写 ListView 控件的 DoubleClick 事件代码。

private void listView1_DoubleClick_1(object sender, EventArgs e)

{

foreach (int listIndex in listView1.SelectedIndices)

{

listViewShow(listView1.Items[listIndex].Text);

}

}

private void splitContainer1_Panel1_Paint(object sender, PaintEventArgs e)

{

}

}

}

注意:编写代码过程中,不可盲目照抄,仔细思考,加深内容的理解和使用。

四、实验总结

注:本部分写本次实验过程中出现的问题、如何解决、注意事项、以及自己的经 验体会。

 

一开始运行怎么都运行不出来画面,经过检查之后发现多调用了一次InitializeComponent()函数,去掉之后就可以读出来我的文件目录了。感到很神奇,代码中没有一处引用我的文件名但是可以获取我电脑中的文件目录,又一次感到了C#的强大和神奇!

 

.NET程序设计实验四的更多相关文章

  1. 20172314 Android程序设计 实验四

    课程:<程序设计与数据结构> 班级: 1723 姓名: 方艺雯 学号:20172314 实验教师:王志强 实验日期:2018年5月30日 必修/选修: 必修 1.实验内容及要求 (1)An ...

  2. 2017-2018-1 20155214&20155216 实验四:外设驱动程序设计

    2017-2018-1 20155214&20155216 实验四:外设驱动程序设计 实验四外设驱动程序设计-1 实验要求: 学习资源中全课中的"hqyj.嵌入式Linux应用程序开 ...

  3. 20145316&20145229实验四:驱动程序设计

    20145316&20145229实验四:驱动程序设计 结对伙伴:20145316 许心远 博客链接:http://www.cnblogs.com/xxy745214935/p/6130871 ...

  4. 20145213 《Java程序设计》实验四 Android开发基础

    20145213 <Java程序设计>实验四 Android开发基础 说在前面的话 不同以往实验,对于这次实验具体内容我是比较茫然的.因为点我,打开实验四的链接居然能飘出一股熟悉的味道,这 ...

  5. 20145308刘昊阳 《Java程序设计》实验四 Android环境搭建 实验报告

    20145308刘昊阳 <Java程序设计>实验四 Android环境搭建 实验报告 实验名称 Android环境搭建 实验内容 搭建Android环境 运行Android 修改代码,能输 ...

  6. 20145225《Java程序设计》 实验四 Android开发基础

    20145225<Java程序设计> 实验四 Android开发基础 实验报告 实验内容 安装Android Studio 运行安卓AVD模拟器 使用安卓运行出虚拟手机并显示HelloWo ...

  7. 信息安全系统设计基础实验四:外设驱动程序设计 20135211李行之&20135216刘蔚然

    北京电子科技学院(BESTI) 实 验 报 告 封面 课程:信息安全系统设计基础                                           班级:1352           ...

  8. 20145222黄亚奇《Java程序设计》实验四实验报告

    20145222<Java程序设计>第四次实验报告 实验四 Android环境搭建 实验内容 1.搭建Android环境 2.运行Android 3.修改代码,能输出学号 实验步骤 搭建A ...

  9. 20145227 《Java程序设计》实验四实验报告

    20145227 <Java程序设计>实验四实验报告 实验内容 安装Andriod Studio并配置软件 使用Andriod Studio软件实现Hello World的小程序 实验步骤 ...

随机推荐

  1. Azure KeyVault(四)另类在 .NET Core 上操作 Secrets 的类库方法-----Azure.Security.KeyVault.Secrets

    一,引言 上一篇文章我们在 .Net Core Web 项目中添加了 "Microsoft.Azure.KeyVault" 的 Nuget 包操作 Azure KeyVault 的 ...

  2. 网络标准之:永远是1.0版本的MIME

    目录 简介 MIME详解 MIME头 MIME-Version Content-Type Content-Disposition Content-Transfer-Encoding Encoded-W ...

  3. Linux du命令和df命令区别

    du 命令 1.命令格式: du [选项][文件] 2.命令功能: 显示每个文件和目录的磁盘使用空间. 3.命令参数: -a或-all 显示目录中个别文件的大小. -b或-bytes 显示目录或文件大 ...

  4. 阿里云CND加速

    1: :2: 3: 4: 5: 6: 7:将解析信息如实添加 8:如果报错添加 CNAME 记录提示和 A 记录冲突,也就是说如果你要添加 CDN 全站加速,域名解析那里就不能再有 A 记录了, 只有 ...

  5. PHP实现二维数组(或多维数组)转换成一维数组

    1 array_reduce函数法 用array_reduce()函数是较为快捷的方法: $result = array_reduce($user, function ($result, $value ...

  6. 理解HMM算法

    长这样: 理解的前提: (1)状态:生成观测值的变量(上图中的"吃"和"睡"). (2)观测值:状态乘上输出概率对应的输出(上图中的橙色节点). (3)输出概率 ...

  7. 前端面试题(react)

    React 组件生命周期 在本章节中我们将讨论 React 组件的生命周期. 组件的生命周期可分成三个状态: Mounting:已插入真实 DOM Updating:正在被重新渲染 Unmountin ...

  8. mq消息堆积处理

    1.大量消息在mq里积压 场景:几千万条数据在MQ里积压了七八个小时,从下午4点多,积压到了晚上很晚,10点多,11点多.线上故障了,这个时候要不然就是修复consumer的问题,让他恢复消费速度,然 ...

  9. Linux 进程打开最大文件连接数Too many open files

    首先出现这个提示的原因:应用程序打开的文件数量超过了系统设定值. 如何查看当前系统每个用户最大允许打开文件数量: [root@registry ~]# ulimit -a core file size ...

  10. 6月26日 Django 中间件

     前戏 我们在前面的课程中已经学会了给视图函数加装饰器来判断是用户是否登录,把没有登录的用户请求跳转到登录页面.我们通过给几个特定视图函数加装饰器实现了这个需求.但是以后添加的视图函数可能也需要加上装 ...