小项目:mini资源管理器【使用IO流:包含(Directory与DirectoryInfo、File与FileInfo的用法)】

主界面是这样的

1.在点击查询引发的事件时把TextBox.Text输入的目录地址加载到TreeList控件里。

private void btnSelect_Click(object sender, EventArgs e)
{

//避免重复加载
tv.Nodes.Clear();

////Load事件手动添加根节点
TreeNode tn = new TreeNode();
tn.Text =
tbxName.Text;//根节点名字;
tn.Tag = tbxName.Text;//根节点物理地址;

tv.Nodes.Add(tn);
}

2.写一个加载当前节点所有文件夹的方法

DirectoryInfo info; //先创建一个文件夹对象

public void LoadDirectory(TreeNode selectNode)

{
  //每次点击事件后选中节点的子节点会重复加载,所以需要先清空

  selectNode.Nodes.Clear();
  //把选中节点文件的地址传给path;
  string path =
selectNode.Tag.ToString();
  //把想要的文件夹信息传给info
  info = new
DirectoryInfo(path);
  //当前目录的子目录对象数组
  DirectoryInfo[]
direct;
  try
  {
    direct = info.GetDirectories();
    foreach
(DirectoryInfo item in direct)//遍历子目录数组

    {
      TreeNode tn = new TreeNode();
      tn.Text =
item.Name;
      tn.Tag = item.FullName;//文件夹的物理路径

      selectNode.Nodes.Add(tn);
    }
  }
  catch (Exception
ex)
  {
    MessageBox.Show(ex.ToString());
  }
}

3.选中节点的时候展开文件夹目录,然后ListView控件里还得展示选中节点文件夹里的所有文件,还得写一个加载当前节点的所有文件的方法

public void LoadAllFiles()

{
  lv.Items.Clear();//因为每选中一次都会触发事件,会重复加载,所以先清空listview控件

  try
  {
    FileInfo[] files =
info.GetFiles();//创建一个文件的数组
    foreach (FileInfo item in
files)//遍历文件数组给Listview绑定值
    {
      ListViewItem lvitem
= new ListViewItem(item.Name);
      lvitem.SubItems.Add(item.Length * 1.0 /
1024 +
"KB");
      lvitem.SubItems.Add(item.Extension);
      lvitem.SubItems.Add(item.FullName);
      lv.Items.Add(lvitem);
    }
  }
  catch
(Exception a)
  {
    MessageBox.Show("系统文件,禁止访问!");//有的文件是系统文件不会让访问的!

  }
}

3.点击TreeView事件后调用加载当前节点所有文件夹的方法和加载当前节点的所有文件的方法
private void
tv_AfterSelect(object sender, TreeViewEventArgs e)
{
  TreeNode
selectNode =
tv.SelectedNode;
  LoadDirectory(selectNode);
  LoadAllFiles();

}

另外还有其他的一些事件和方法:

双击ListView打开选中文件的方法

//打开文件
private void lv_DoubleClick(object sender, EventArgs e)

{
  string path =
lv.SelectedItems[0].SubItems[3].Text;
  Process.Start(path);//用此方法打开文件
}

//选中ListView文件右键点击复制的方法
private void tsmiCopy_Click(object sender,
EventArgs e)
{
  if (this.lv.SelectedItems.Count ==
0)
  {
    return;
  }
  FolderBrowserDialog fbd = new
FolderBrowserDialog();//FolderBrowserDialog,文件夹浏览器对话, 提示用户选择文件夹

  DialogResult result = fbd.ShowDialog();
  string
path=lv.SelectedItems[0].SubItems[3].Text;
  string despath=null;
  if
(result == DialogResult.OK)
  {
    despath =
fbd.SelectedPath;//获取当前用户选择的路径
    despath +=
lv.SelectedItems[0].SubItems[0].Text;
    File.Copy(path,
despath,true);
    MessageBox.Show("复制成功!");
  }

}

删除ListView选中文件的方法:

private void tsmiDelete_Click(object sender, EventArgs e)

{

  if (this.lv.SelectedItems.Count ==
0)
  {
  return;
  }
  DialogResult result=
MessageBox.Show("确定删除么?", "系统提示", MessageBoxButtons.OKCancel,
MessageBoxIcon.Asterisk);
  string
path=lv.SelectedItems[0].SubItems[3].Text;
  if (result ==
DialogResult.OK)
  {
  File.Delete(path);
  }
  LoadAllFiles();//删除后重新加载ListView控件绑定的值
}

移动的方法:

private void tsmiMove_Click(object sender, EventArgs e)
{
  if
(this.lv.SelectedItems.Count ==
0)
  {
    return;
  }
  FolderBrowserDialog fbd = new
FolderBrowserDialog();
  DialogResult result = fbd.ShowDialog();
  string
path = lv.SelectedItems[0].SubItems[3].Text;
  string despath = null;
  if
(result == DialogResult.OK)
  {
    despath =
fbd.SelectedPath;
    despath +=
lv.SelectedItems[0].SubItems[0].Text;//新路径必须拼接,此处拼接有误,回头再改!

    File.Move(path, despath);
    MessageBox.Show("移动成功!");
  }

}

还有一个复制文件夹的方法,由于文件夹下可能有子文件夹或者文件,不好区分,方法有些复杂,借用一下老师的代码:

private void CopyDirectory(string srcdir, string
desdir)//第一个参数是原路径,第二个参数是新路径
{
  string folderName =
srcdir.Substring(srcdir.LastIndexOf("\\") + 1);

  string desfolderdir = desdir +"\\"+ folderName;

  string[] filenames = Directory.GetFileSystemEntries(srcdir);

  foreach (string file in filenames)// 遍历所有的文件和目录

  {
    if (Directory.Exists(file))// 先当作目录处理如果存在这个目录就递归Copy该目录下面的文件

    {

      string currentdir = desfolderdir + "\\" +
file.Substring(file.LastIndexOf("\\") + 1);
      if
(!Directory.Exists(currentdir))
      {
        Directory.CreateDirectory(currentdir);
      }

        CopyDirectory(file, desfolderdir);
     }

     else // 否则直接copy文件
     {
      string srcfileName
= file.Substring(file.LastIndexOf("\\") + 1);

      srcfileName = desfolderdir + "\\" + srcfileName;

        if
(!Directory.Exists(desfolderdir))
        {
          Directory.CreateDirectory(desfolderdir);
        }

        File.Copy(file,
srcfileName);
      }
    }
  Directory.CreateDirectory(desfolderdir);

}

……………………………………………………………………………………………………………………………………………………………………………………………………………………

File类和Directory类都可以类名.出方法名,都是静态方法,由于File类的静态方法在使用时都会进行安全检查,所以如果想多次使用某个文件对象,可以考虑使用FileInfo类相应的实例方法。

FileInfo实例化后可以直接.Extension这个是文件扩展名部分的字符串也就是文件的类型字符串,不必像File类一样再拼接文件名得出后面的类型字符串了,很好用!

小项目:mini资源管理器【使用IO流:包含(Directory与DirectoryInfo、File与FileInfo的用法)】

时间: 2024-11-03 03:26:54

小项目:mini资源管理器【使用IO流:包含(Directory与DirectoryInfo、File与FileInfo的用法)】的相关文章

小型资源管理器,IO操作,读取和写入文件和目录的常用操作

解决方案: 小总结: 用IO流,的file,DirectoryInfo的方法绑定Treeview控件上和删除,读取, 可以熟练掌握一下IO流 主页面: 1 private void Form1_Load(object sender, EventArgs e) 2 { 3 4 //创建一个根节点 5 TreeNode root = new TreeNode(); 6 root.Text = "D:\\"; //显示的是文件夹名称(单独名称) 7 root.Tag = "D:\\

[原创] Delphi小工具(Windows资源管理器右键菜单扩展)

两个小工具 1. 项目临时文件清理 2. Android Ndk 编译 c/c++ jni 源码工具. 下载后,点击Reg.bat就可以完成注册安装.不需要时点击 UnReg.Bat 就可以删除菜单. 下载地址: 链接: http://pan.baidu.com/s/1i4P9ZDF 密码: di9h

IO流(一):File和递归

一.File (一)概述 1.File: 1)文件和目录(文件夹)路径名的抽象表示形式 2)注意: 可以表示文件夹与文件,即路径与文件 抽象概念,即路径与文件是否存在不确定 2.构造方法 1)File(String pathname):根据一个路径得到File对象 File file = new File("E:\\demo\\a.txt"); 2)File(String parent, String child):根据一个目录和一个子文件/目录得到File对象 File file2

10.9-全栈Java笔记:装饰器模式构建IO流体系

装饰器模式 装饰器模式是GOF23种设计模式中较为常用的一种模式.它可以实现对原有类的包装和装饰,使新的类具有更强的功能. 我这里有智能手机Iphone, 我们可以通过加装投影组件,实现原有手机功能的扩展.这就是一种"装饰器模式". 我们在未来普通人加装"外骨骼"装饰,让普通人具有力扛千斤的能力,也是一种"装饰器模式". [图] 手机经过投影套件"装饰后",成为功能更强的"投影手机" [示例1]装饰器模式代

10gocm->session5->数据库管理实验->GC资源管理器的资源消耗组介绍

<GC资源管理器> 公文:administrator's Guide->24 Using the Database Resource Manager 用法:在实际生产环境中使用的少 行动:限制使用数据库资源.CPU    undo表空间  IO  session 场合:当有多个应用使用一个数据库而且资源紧张时可用"资源管理器"调节 实现:可用GC完毕也可用EM完毕.还能够使用程序包完毕 UI方式:简单,快捷,不easy出错 commend方式:设置复杂,命令非常长.失

使用寻路算法写的一个小项目

用寻路算法写的一个小项目 地址 https://a1115040996.github.io/arithmetic/html/寻路应用.html 没来得及仔细优化,后面再优化 代码如下 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <link rel="stylesheet" type="t

Java IO流详解(二)——File类

在上一章博客中简单的介绍了Java IO流的一些特征.也就是对文件的输入输出,既然至始至终都离不开文件,所以Java IO流的使用得从File这个类讲起. File类的描述:File类是文件和目录路径名的抽象表示形式,主要用于文件和目录的创建.查找和删除等操作.即Java中把文件或者目录(文件夹)都封装成File对象.也就是说如果我们要去操作硬盘上的文件或者目录只要创建File这个类即可. 不过要注意的是File类只是对文件的操作类,只能对文件本身进行操作,不能对文件内容进行操作. 1.File

初识IO流之小型资源管理器

初次接触到IO流,根据书本上的知识,加上自己的摸索,发现了一些好玩的事情.(书本上的知识或多或少,有时候不足以解决我们的问题!这时候我们就应该自己去求解!!! 所以我们学习的时候要抱有探索的精神,求知若渴是帮助我们获取更多知识的一种积极的精神态度,需要保持) 小型资源管理器 该项目主要是为了加载电脑磁盘中存在的所有文件夹和文件(directory,file) 这时候我遇到了第一个问题:书本上只有将指定的磁盘设为根节点,在窗体TreeView中添加该磁盘中的文件夹 (我去,那如果我的电脑上分了几十

IO流的应用————小型资源管理器

小型资源管理器 private void LoadTreeView() { DirectoryInfo dir = new DirectoryInfo(@"E:\"); DirectoryInfo[] dirs= dir.GetDirectories(); foreach (DirectoryInfo item in dirs) { TreeNode tn = new TreeNode(); tn.Text = item.Name; tn.Tag = item.FullName; th