刘一辰的软件工程随笔
实验四 文件操作
一、实验目的
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)单击启动调试工具,运行结果参见下图。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace text2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
TreeNode myComputerNode = new TreeNode("此电脑");
treeView1.Nodes.Add(myComputerNode);
listViewShow(myComputerNode);
}
private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
{
listViewShow(e.Node);
DirTreeShow(e.Node);
}
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);
}
}
}
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
{
}
}
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
{
}
}
private void listView1_SelectedIndexChanged(object sender, EventArgs e)
{
}
private void listView1_DoubleClick_1(object sender, EventArgs e)
{
foreach (int listIndex in listView1.SelectedIndices)
{
listViewShow(listView1.Items[listIndex].Text);
}
}
}
}
四、实验总结
知道了从哪里设置事件尝试了其他新的事件 学习了listview treenode的相关操作 一开始事件直接复制函数不能运行 后来解决了
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!