winform:简单文件资源管理器

简介: 今天全部学习内容的体现就是winform的资源管理器。这个资源管理器主要由一个textbox获取路径,然后在treeview那里通过递归的方式呈现目录树,当用户点击treeview的节点是,会触发AfterSelect事件加载子节点,然后在listview那里呈现对应目录下的文件。

今天全部学习内容的体现就是winform的资源管理器。这个资源管理器主要由一个textbox获取路径,然后在treeview那里通过递归的方式呈现目录树,当用户点击treeview的节点是,会触发AfterSelect事件加载子节点,然后在listview那里呈现对应目录下的文件。而当用户点击listview的一些文件时,如果是txt文件的话,会根据默认编码在下面的textbox里显示其内容。其他的按钮主要是一些简单的IO操作。

难点在于递归的理解以及运用。

以下是各种事件处理 

  #region 选择路径  -void txtPath_Click(object sender, EventArgs e)

         ///   <summary>
        
///  选择路径 
        
///   </summary>
        
///   <param name="sender"></param>
        
///   <param name="e"></param>
         private  void txtPath_Click( object sender, EventArgs e)
        {

            FolderBrowserDialog fbd =  new FolderBrowserDialog();
             if (fbd.ShowDialog() == DialogResult.OK)
            {
                txtPath.Text = fbd.SelectedPath;
                 // 打开目录对话框所选择的路径是  SelectedPath
            }
        }
         #endregion

 

    #region 获取指定目录子目录和子文件 -void btnGetPath_Click(object sender, EventArgs e)

         ///   <summary>
        
///  获取指定目录子目录和子文件
        
///   </summary>
        
///   <param name="sender"></param>
        
///   <param name="e"></param>
         private  void btnGetPath_Click( object sender, EventArgs e)
        {
            tvDir.Nodes.Clear();
             // 1.获取指定目录下所有子目录
            
// 第一个参数是指查找的目录   第二个参数是指查询匹配项,*代表所有内容,   第三个参数代码查找的位置,默认只是查找指定的目录下面的内容,我们还可以设置查找子目录的子目录。。。。。
            
// string[] dirs = Directory.GetDirectories(txtPath.Text, "*o*", SearchOption.TopDirectoryOnly);
             if (txtPath.Text.Trim().Length ==  0)
            {
                 return;
            }
             else
            {
                LoadData(txtPath.Text,  null);
                LoadFiles(txtPath.Text);
            }
        }
         #endregion

 

 

  #region 树控件节点点击之后触发  -void tvDir_AfterSelect(object sender, TreeViewEventArgs e)

         ///   <summary>
        
///  树控件节点点击之后触发
        
///   </summary>
        
///   <param name="sender"></param>
        
///   <param name="e"></param>
         private  void tvDir_AfterSelect( object sender, TreeViewEventArgs e)
        {
             // 获取当前所选择的节点
            TreeNode node =  this.tvDir.SelectedNode;
             if (node ==  null// 判断有没有选择某一个节点
            {
                 return;
            }
             // 再将之前存储到Tag值的全路径取出来使用
             string path = node.Tag.ToString();
             // 使用实例类来实现目录和文件的获取
            
// 1.获取目录
            LoadData(path, node);
            LoadFiles(path);
        }
         #endregion

 

 #region 单击文件,显示文件内容  - void lvList_Click(object sender, EventArgs e)

         ///   <summary>
        
///  单击文件,显示文件内容
        
///   </summary>
        
///   <param name="sender"></param>
        
///   <param name="e"></param>
         private  void lvList_Click( object sender, EventArgs e)
        {
             string path =  this.lvList.SelectedItems[ 0].Tag.ToString();
             if (Path.GetExtension(path) ==  " .txt " || Path.GetExtension(path) ==  " .cs ")
            {

                 string str = File.ReadAllText(path, Encoding.Default);

                 // string[] str = File.ReadAllLines(path, Encoding.Default);

                 this.txtContent.Text = str;
            }
        }
         #endregion

 

 

  #region 加载树节点和listview控件的项  - void LoadData(string path, TreeNode parentNode)

         ///   <summary>
        
///  加载树节点和listview控件的项
        
///   </summary>
        
///   <param name="path"></param>
        
///   <param name="parentNode"></param>
         void LoadData( string path, TreeNode parentNode)
        {
             // tvDir.Nodes.Clear();
             if (path.Trim().Length ==  0)
            {
                MessageBox.Show( " 路径为空 ");
                 return;
            }
             else
            {
                DirectoryInfo dir =  new DirectoryInfo(path);
                DirectoryInfo[] dirs = dir.GetDirectories();
                 // 将得到的目录生成为树节点添加给刚刚点击的节点对象
                 foreach (DirectoryInfo d  in dirs)
                {
                    TreeNode subNode =  new TreeNode(d.Name);  // 目录名称
                    subNode.Tag = d.FullName;  // 全路径 
                    
// 任何一个节点都会有一个了节点集合
                     if (parentNode ==  null// 为null说明当前是为树的根节点添加
                    {
                        tvDir.Nodes.Add(subNode);
                    }
                     else
                    {
                        parentNode.Nodes.Add(subNode);  // 第一个不一样的地方
                    }
                     /* 递归的特点:方法调用方法本身
                   * 1.递归在保证有结束的时候
                     * 2.递归的操作是类似一样的,但是执行的次数却不确定
                   
*/
                     // 加载一个目录,立刻来加载它的子目录
                    LoadData(subNode.Tag.ToString(), subNode);
                }
            }
        }
         #endregion

 

    #region 加载文件  ListView- void LoadFiles(string path)

         ///   <summary>
        
///  加载文件
        
///   </summary>
        
///   <param name="path"></param>
         void LoadFiles( string path)
        {
            DirectoryInfo dir =  new DirectoryInfo(path);
             this.tvDir.ExpandAll();
             this.lvList.Items.Clear();
             // 获取子文件
            FileInfo[] myFiles = dir.GetFiles();
             foreach (FileInfo f  in myFiles)
            {
                 // 1.添加主项
                ListViewItem lv =  new ListViewItem(f.Name);
                 // 为主项添加子项
                lv.SubItems.AddRange( new  string[] { f.Extension, (f.Length /  1024).ToString() +  " KB ", f.FullName });
                lv.Tag = f.FullName;
                 this.lvList.Items.Add(lv);
            }
        }
         #endregion

 

         #region 复制按钮
         private  void btnCopy_Click( object sender, EventArgs e)
        {
             if ( this.lvList.SelectedItems.Count ==  0)
            {
                 return;
            }
            FolderBrowserDialog f =  new FolderBrowserDialog();
             string desPath =  "";
             if (f.ShowDialog() == DialogResult.OK)
            {
                desPath = f.SelectedPath;
            }
             // string path = this.lvList.SelectedItems[0].Tag.ToString();
             string path =  this.lvList.SelectedItems[ 0].SubItems[ 3].Text;
             // 两个参数都是全路径  文件夹+文件名
             if (File.Exists(Path.Combine(desPath,  this.lvList.SelectedItems[ 0].Text)))
            {
                MessageBox.Show( " 文件已经存在 ");
                 return;
            }
             else
            {
                File.Copy(path, Path.Combine(desPath,  this.lvList.SelectedItems[ 0].Text));
                MessageBox.Show( " ok ");
            }
        }
         #endregion
         #region 移动按钮
         private  void btnMove_Click( object sender, EventArgs e)
        {
             if ( this.lvList.SelectedItems.Count ==  0)
            {
                 return;
            }
            FolderBrowserDialog f =  new FolderBrowserDialog();
             // 用来储存打开对话框的路径
             string desPath =  "";
             if (f.ShowDialog() == DialogResult.OK)
            {
                desPath = f.SelectedPath;
            }

             string path =  this.lvList.SelectedItems[ 0].SubItems[ 3].Text;
             // 两个参数都是全路径  文件夹+文件名

            File.Move(path, Path.Combine(desPath,  this.lvList.SelectedItems[ 0].Text));
             int index =  this.lvList.SelectedItems[ 0].Index;  // 得到当前选择项的行索引
             this.lvList.Items.RemoveAt(index);
            MessageBox.Show( " ok ");
        }
         #endregion
         #region 创建按钮
         private  void btnCreate_Click( object sender, EventArgs e)
        {
           

                File.Create(txtPath.Text.Trim());
          
        }
         #endregion
         #region 删除按钮
         private  void btnDelete_Click( object sender, EventArgs e)
        {
             if ( this.lvList.SelectedItems.Count ==  0)
            {
                 return;
            }
             string path =  this.lvList.SelectedItems[ 0].SubItems[ 3].Text;
             if (MessageBox.Show( " 是否真的想删除? "" 操作提示 ", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes)
            {
                File.Delete(path);
                 int index =  this.lvList.SelectedItems[ 0].Index;  // 得到当前选择项的行索引
                 this.lvList.Items.RemoveAt(index);
                MessageBox.Show( " ok ");
            }
        }
         #endregion
         #region 退出

         private  void button1_Click( object sender, EventArgs e)
        {
            Application.Exit();
        }
        

        #endregion 

 

最后贴个删除的效果图:

 

 

PS:本文不是教程,控件属性内容请自行脑补 。

 

 

 

 

 

 

目录
相关文章
|
Go
VSCode资源管理器文件树缩进配置
VSCode文件树缩进太小,看上去一点都不清晰
1175 0
VSCode资源管理器文件树缩进配置
|
6月前
|
Windows
卸载应用后,删除安装根目录下的所有文件,提示已在另一进程打开,在资源管理器进程中找不到该程序的解决
卸载应用后,删除安装根目录下的所有文件,提示已在另一进程打开,在资源管理器进程中找不到该程序的解决
49 0
Swing书写一个资源管理器(文件树)
Swing书写一个资源管理器(文件树)
239 0
Swing书写一个资源管理器(文件树)
|
Windows
Windows 技术篇-资源管理器文件默认排序设置,通用文件夹排序设置
Windows 技术篇-资源管理器文件默认排序设置,通用文件夹排序设置
321 0
Windows 技术篇-资源管理器文件默认排序设置,通用文件夹排序设置
Visual Studio 2012资源管理器里单击打开改为双击打开文件
Visual Studio 2012资源管理器里,单击打开文件改为双击打开文件,如图: 如果本文对你有所帮助,请打赏——1元就足够感动我:) 联系邮箱:intdb@qq.com 我的GitHub: https://github.com/vipstone 关注公众号: 作者: 王磊 出处: http://vipstone.cnblogs.com/ 本文版权归作者和博客园共有,欢迎转载,请标明出处。
623 0
|
11月前
|
存储 程序员 编译器
【Effective C++详细总结】第三章 资源管理
【Effective C++详细总结】第三章 资源管理
233 0

热门文章

最新文章