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#实现千万数据秒级导入的代码

《C#实现千万数据秒级导入的代码》在实际开发中excel导入很常见,现代社会中很容易遇到大数据处理业务,所以本文我就给大家分享一下千万数据秒级导入怎么实现,文中有详细的代码示例供大家参考,需要的朋友可... 目录前言一、数据存储二、处理逻辑优化前代码处理逻辑优化后的代码总结前言在实际开发中excel导入很

C#使用Spire.Doc for .NET实现HTML转Word的高效方案

《C#使用Spire.Docfor.NET实现HTML转Word的高效方案》在Web开发中,HTML内容的生成与处理是高频需求,然而,当用户需要将HTML页面或动态生成的HTML字符串转换为Wor... 目录引言一、html转Word的典型场景与挑战二、用 Spire.Doc 实现 HTML 转 Word1

C#实现一键批量合并PDF文档

《C#实现一键批量合并PDF文档》这篇文章主要为大家详细介绍了如何使用C#实现一键批量合并PDF文档功能,文中的示例代码简洁易懂,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言效果展示功能实现1、添加文件2、文件分组(书签)3、定义页码范围4、自定义显示5、定义页面尺寸6、PDF批量合并7、其他方法

SpringBoot 多环境开发实战(从配置、管理与控制)

《SpringBoot多环境开发实战(从配置、管理与控制)》本文详解SpringBoot多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版

Vite 打包目录结构自定义配置小结

《Vite打包目录结构自定义配置小结》在Vite工程开发中,默认打包后的dist目录资源常集中在asset目录下,不利于资源管理,本文基于Rollup配置原理,本文就来介绍一下通过Vite配置自定义... 目录一、实现原理二、具体配置步骤1. 基础配置文件2. 配置说明(1)js 资源分离(2)非 JS 资

C#下Newtonsoft.Json的具体使用

《C#下Newtonsoft.Json的具体使用》Newtonsoft.Json是一个非常流行的C#JSON序列化和反序列化库,它可以方便地将C#对象转换为JSON格式,或者将JSON数据解析为C#对... 目录安装 Newtonsoft.json基本用法1. 序列化 C# 对象为 JSON2. 反序列化

C#文件复制异常:"未能找到文件"的解决方案与预防措施

《C#文件复制异常:未能找到文件的解决方案与预防措施》在C#开发中,文件操作是基础中的基础,但有时最基础的File.Copy()方法也会抛出令人困惑的异常,当targetFilePath设置为D:2... 目录一个看似简单的文件操作问题问题重现与错误分析错误代码示例错误信息根本原因分析全面解决方案1. 确保

Redis实现高效内存管理的示例代码

《Redis实现高效内存管理的示例代码》Redis内存管理是其核心功能之一,为了高效地利用内存,Redis采用了多种技术和策略,如优化的数据结构、内存分配策略、内存回收、数据压缩等,下面就来详细的介绍... 目录1. 内存分配策略jemalloc 的使用2. 数据压缩和编码ziplist示例代码3. 优化的

基于C#实现PDF转图片的详细教程

《基于C#实现PDF转图片的详细教程》在数字化办公场景中,PDF文件的可视化处理需求日益增长,本文将围绕Spire.PDFfor.NET这一工具,详解如何通过C#将PDF转换为JPG、PNG等主流图片... 目录引言一、组件部署二、快速入门:PDF 转图片的核心 C# 代码三、分辨率设置 - 清晰度的决定因

C# LiteDB处理时间序列数据的高性能解决方案

《C#LiteDB处理时间序列数据的高性能解决方案》LiteDB作为.NET生态下的轻量级嵌入式NoSQL数据库,一直是时间序列处理的优选方案,本文将为大家大家简单介绍一下LiteDB处理时间序列数... 目录为什么选择LiteDB处理时间序列数据第一章:LiteDB时间序列数据模型设计1.1 核心设计原则