C#.NET中管理文件(磁盘和目录的管理)

2024-04-20 04:38

本文主要是介绍C#.NET中管理文件(磁盘和目录的管理),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 初始化控件
    类Directory封装了访问及操作磁盘和目录的方法。使用Directory类需要在类DirectoryDialog的声明之前加入对System.IO名字空间的应用。在类的DirectoryDialog的构造方法中初始化控件。这里要把本地所有的磁盘列在ComboBox控件中并在TreeView控件中显示第一个磁盘的目录下的所有目录。

public DirectoryDialog()
        {
            InitializeComponent();
            String[] drivers = null;
            try
            {
                drivers = Directory.GetLogicalDrives();
            }

            catch (Exception excep)
            {
                MessageBox.Show(excep.Message, "false",  MessageBoxButtons.OK);
                return;
            }
            int CDriverIndex = 0;
            for (int i = 0; i < drivers.Length; i++)
            {
                comboBox1.Items.Add(drivers[i]);
                if (drivers[i].Equals("C://") || drivers[i].Equals("C://"))
                {
                    CDriverIndex = i;
                }

            }
            path = drivers[CDriverIndex];
            comboBox1.SelectedIndex = CDriverIndex;
            TreeNode node = new TreeNode(path);
            node.ImageIndex = 0;
            node.SelectedImageIndex = 0;
            treeView1.Nodes.Add(node);
            string[] dirs = null;
            try
            {
                dirs = Directory.GetDirectories(path);
            }
            catch (Exception excep)
            {
                MessageBox.Show(excep.Message, "false", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            for (int i = 0; i < dirs.Length; i++)
            {
                int lastIndex = dirs[i].LastIndexOf("//");
                node = new TreeNode(dirs[i].Substring(lastIndex + 1));
                node.ImageIndex = 1;
                node.SelectedImageIndex = 1;
                treeView1.Nodes[0].Nodes.Add(node);
            }
        }
实现ComboBox控件的事件方法
    当用户打开ComboBox的下拉列表,作选择之后再关闭下拉列表时,ComboBox控件就会发SelectedIndexChanged事件。

 private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            path = comboBox1.SelectedItem.ToString();
            treeView1.Nodes.Clear();
            TreeNode node = new TreeNode(path);
            node.ImageIndex = 0;
            node.SelectedImageIndex = 0;
            treeView1.Nodes.Add(node);
            String[] dirs = null;
            try
            {
                dirs = Directory.GetDirectories(path);
            }
            catch(Exception excep)
            {
                MessageBox.Show(excep.Message, "false", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            for(int i=0;i<dirs.Length;i++)
            {
                int lastIndex=dirs[i].LastIndexOf("//");
                node=new TreeNode(dirs[i].Substring(lastIndex+1));
                node.ImageIndex=1;
                node.SelectedImageIndex=1;
                treeView1.Nodes[0].Nodes.Add(node);
            }
        }

实现TreeView控件的事件方法
当用户要展开某个磁盘或目录时,需要初始化这个磁盘或目录中的所有子目录下的子目录,这需要实现TreeeView的BeforeExpand事件方法。在目录展开之后,需要更改节点的图标,这需要实现TreeeView 的AfterExpand事件方法。在目录折叠之后,也需要更改节点的图标,这需要实现TreeeView的AfterCollapse事件方法。当用户选择一个目录时,需要记录用户的选择,这需要实现TreeeView的AfterSelect事件方法。

 private void treeView1_BeforeExpand(object sender, TreeViewCancelEventArgs e)
        {
            String fullPath;
            if (e.Node.Equals(treeView1.Nodes[0]))
            {
                fullPath = "";
            }
            else
            {
                fullPath = e.Node.Text + "//";
            }
            TreeNode tempNode = e.Node;
            while (tempNode.Parent != null && !tempNode.Parent.Equals(treeView1.Nodes[0]))
            {
                fullPath = tempNode.Parent.Text + "//" + fullPath;
                tempNode = tempNode.Parent;
            }
            fullPath = treeView1.Nodes[0].Text + fullPath;
            for (int i = 0; i < e.Node.Nodes.Count; i++)
            {
                String[] dirs = null;
                try
                {
                    dirs = Directory.GetDirectories(fullPath + e.Node.Nodes[i].Text);
                }
                catch (Exception excep)
                {
                    MessageBox.Show(excep.Message, "false", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    break;
                }
                e.Node.Nodes[i].Nodes.Clear();
                for (int j = 0; j < dirs.Length; j++)
                {
                    int lastIndex = dirs[j].LastIndexOf("//");
                    TreeNode newNode = new TreeNode(dirs[j].Substring(lastIndex + 1));
                    newNode.ImageIndex = 1;
                    newNode.SelectedImageIndex = 1;
                    e.Node.Nodes[i].Nodes.Add(newNode);
                }
            }

      }

 private void treeView1_AfterExpand(object sender, TreeViewEventArgs e)
        {
            if (!e.Node.Equals(treeView1.Nodes[0]))
            {
                e.Node.ImageIndex = 2;
                e.Node.SelectedImageIndex = 2;
            }

        }

        private void treeView1_AfterCollapse(object sender, TreeViewEventArgs e)
        {
            if (!e.Node.Equals(treeView1.Nodes[0]))
            {
                e.Node.ImageIndex = 1;
                e.Node.SelectedImageIndex = 1;
            }
        }
 private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
        {
            if (e.Node.Equals(treeView1.Nodes[0]))
            {
                path = "";
            }
            else
            {
                path = e.Node.Text + "//";
            }
            TreeNode tempNode = e.Node;
            while (tempNode.Parent != null && !tempNode.Parent.Equals(treeView1.Nodes[0]))
            {
                path = tempNode.Parent.Text + "//" + path;
                tempNode = tempNode.Parent;
            }
            path = treeView1.Nodes[0].Text + path;
        }

使用对话框
前面已经实现了一个可以浏览磁盘和目录的对话框,这里要在主窗体中显示这个对话框,并获取所选择的目录。使用这个对话框的代码位于按钮的点击事件方法中。

 private void button1_Click(object sender, EventArgs e)
        {
            DirectoryDialog ddlg = new DirectoryDialog();
            if (ddlg.ShowDialog() == DialogResult.OK)
            {
                textBox1.Text = ddlg.selectedPath;
            }
        }

        上面的方法是自定义浏览对话框,在TreeView中还记得添加图标。如文件夹和磁盘图标。上面太麻烦,如过使用folderBrowserDialog控键就简单多了。只需要一按钮、一 textbox控件就可以了。代码如下:

 private void button1_Click(object sender, EventArgs e)
        {
            String basePath;
            folderBrowserDialog1.ShowNewFolderButton = true;
            folderBrowserDialog1.ShowDialog();
            textBox1.Text = folderBrowserDialog1.SelectedPath;
            basePath = folderBrowserDialog1.SelectedPath;
        }

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/huang_jb/archive/2007/06/10/1646228.aspx

这篇关于C#.NET中管理文件(磁盘和目录的管理)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/919300

相关文章

C#代码实现解析WTGPS和BD数据

《C#代码实现解析WTGPS和BD数据》在现代的导航与定位应用中,准确解析GPS和北斗(BD)等卫星定位数据至关重要,本文将使用C#语言实现解析WTGPS和BD数据,需要的可以了解下... 目录一、代码结构概览1. 核心解析方法2. 位置信息解析3. 经纬度转换方法4. 日期和时间戳解析5. 辅助方法二、L

Spring中管理bean对象的方式(专业级说明)

《Spring中管理bean对象的方式(专业级说明)》在Spring框架中,Bean的管理是核心功能,主要通过IoC(控制反转)容器实现,下面给大家介绍Spring中管理bean对象的方式,感兴趣的朋... 目录1.Bean的声明与注册1.1 基于XML配置1.2 基于注解(主流方式)1.3 基于Java

基于Python+PyQt5打造一个跨平台Emoji表情管理神器

《基于Python+PyQt5打造一个跨平台Emoji表情管理神器》在当今数字化社交时代,Emoji已成为全球通用的视觉语言,本文主要为大家详细介绍了如何使用Python和PyQt5开发一个功能全面的... 目录概述功能特性1. 全量Emoji集合2. 智能搜索系统3. 高效交互设计4. 现代化UI展示效果

使用C#删除Excel表格中的重复行数据的代码详解

《使用C#删除Excel表格中的重复行数据的代码详解》重复行是指在Excel表格中完全相同的多行数据,删除这些重复行至关重要,因为它们不仅会干扰数据分析,还可能导致错误的决策和结论,所以本文给大家介绍... 目录简介使用工具C# 删除Excel工作表中的重复行语法工作原理实现代码C# 删除指定Excel单元

Mysql中的用户管理实践

《Mysql中的用户管理实践》:本文主要介绍Mysql中的用户管理实践,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录13. 用户管理13.1 用户 13.1.1 用户信息 13.1.2 创建用户 13.1.3 删除用户 13.1.4 修改用户

Linux给磁盘扩容(LVM方式)的方法实现

《Linux给磁盘扩容(LVM方式)的方法实现》本文主要介绍了Linux给磁盘扩容(LVM方式)的方法实现,涵盖PV/VG/LV概念及操作步骤,具有一定的参考价值,感兴趣的可以了解一下... 目录1 概念2 实战2.1 相关基础命令2.2 开始给LVM扩容2.3 总结最近测试性能,在本地打数据时,发现磁盘空

C#使用MQTTnet实现服务端与客户端的通讯的示例

《C#使用MQTTnet实现服务端与客户端的通讯的示例》本文主要介绍了C#使用MQTTnet实现服务端与客户端的通讯的示例,包括协议特性、连接管理、QoS机制和安全策略,具有一定的参考价值,感兴趣的可... 目录一、MQTT 协议简介二、MQTT 协议核心特性三、MQTTNET 库的核心功能四、服务端(BR

C#继承之里氏替换原则分析

《C#继承之里氏替换原则分析》:本文主要介绍C#继承之里氏替换原则,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C#里氏替换原则一.概念二.语法表现三.类型检查与转换总结C#里氏替换原则一.概念里氏替换原则是面向对象设计的基本原则之一:核心思想:所有引py

linux服务之NIS账户管理服务方式

《linux服务之NIS账户管理服务方式》:本文主要介绍linux服务之NIS账户管理服务方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、所需要的软件二、服务器配置1、安装 NIS 服务2、设定 NIS 的域名 (NIS domain name)3、修改主

C#实现访问远程硬盘的图文教程

《C#实现访问远程硬盘的图文教程》在现实场景中,我们经常用到远程桌面功能,而在某些场景下,我们需要使用类似的远程硬盘功能,这样能非常方便地操作对方电脑磁盘的目录、以及传送文件,这次我们将给出一个完整的... 目录引言一. 远程硬盘功能展示二. 远程硬盘代码实现1. 底层业务通信实现2. UI 实现三. De