小项目: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的用法)】的更多相关文章
- 小型资源管理器,IO操作,读取和写入文件和目录的常用操作
解决方案: 小总结: 用IO流,的file,DirectoryInfo的方法绑定Treeview控件上和删除,读取, 可以熟练掌握一下IO流 主页面: private void Form1_Load( ...
- [原创] Delphi小工具(Windows资源管理器右键菜单扩展)
两个小工具 1. 项目临时文件清理 2. Android Ndk 编译 c/c++ jni 源码工具. 下载后,点击Reg.bat就可以完成注册安装.不需要时点击 UnReg.Bat 就可以删除菜单. ...
- java IO流之文件切割两例(含Properties 用法)
package cn.itcast.io.p1.splitfile; import java.io.File;import java.io.FileInputStream;import java.io ...
- Java IO流学习总结二:File
Java File类的功能非常强大,利用java基本上可以对文件进行所有操作.首先来看File类的构造函数的源码 /** * Internal constructor for already-norm ...
- Android小项目合集(经典教程)包含十五个Android开发应用实例
http://www.cnblogs.com/aimeng/archive/2012/03/28/2422435.html
- 09、IO流—File类与IO流
目录 一.File类 基本认识 实用方法 获取功能 重命名功能(包含剪切) 判断功能 创建.删除文件 实际小案例 二.IO流 1.认识IO流 2.IO流基类介绍 字节流基类介绍 字符流基类介绍 三.节 ...
- 【重学Java】IO流
IO流的UML类图 File类 File类概述和构造方法[应用] File类介绍 它是文件和目录路径名的抽象表示 文件和目录是可以通过File封装成对象的 对于File而言,其封装的并不是一个真正存在 ...
- 史上最骚最全最详细的IO流教程,没有之一!
目录 1.告白IO流的四点明确 2.File类 1.1 File概述 1.2 构造方法 1.3 常用方法 1.3.1 获取功能的方法 1.3.2 绝对路径和相对路径 1.3.3判断功能的方法 1.3. ...
- java IO流读取图片供前台显示
最近项目中需要用到IO流来读取图片以提供前台页面展示,由于以前一直是用url路径的方式进行图片展示,一听说要项目要用IO流读取图片感觉好复杂一样,但任务下达下来了,做为程序员只有选择去执行喽,于是找了 ...
随机推荐
- (转)投票系统,更改ip刷票
前言 相信大家平时肯定会收到朋友发来的链接,打开一看,哦,需要投票.投完票后弹出一个页面(恭喜您,您已经投票成功),再次点击的时候发现,啊哈,您的IP(***.***.***.***)已经投过票了,不 ...
- SDP协议中的Continuation State
在SDP request和SDP response中,最后一部分为Continuation State,结构如下: 它用于一次response不够把所有的Data传回去的情况.这时候需要将respon ...
- Linq&Lumbda (2)
"Lambda表达式"是一个匿名函数,它可以包含表达式和语句,并且可用于创建委托或表达式树类型. Lambda 运算符: => 该运算符读为"goes to&quo ...
- 移动设备优先viewport
Bootstrap 3 的设计目标是移动设备优先,然后才是桌面设备.这实际上是一个非常及时的转变,因为现在越来越多的用户使用移动设备. 为了让 Bootstrap 开发的网站对移动设备友好,确保适当的 ...
- MongoDB常用操作总结
====================================MGDB的操作====================================== 0.创建数据库时使用(use 数据库 ...
- Payoneer欧洲收款账户开通激活及使用-用于接收欧洲公司资金和欧元收款
在亚马逊国际平台的卖家往往会被问道需要美国(或者欧洲或者日本等)银行账户才能收款,这个政策个人认为是亚马逊对当地卖家的保护政策(大量的中国低价物美的卖家涌入会导致当地的卖家没有优势),二是当地税收政策 ...
- Android SDK无法更新问题解决 ---- 还可解决无法上google的问题
Android SDK无法更新问题解决 2012-10-14 10:13:01| 分类: Android|举报|字号 订阅 1.在SDK Manager下Tools->Options打 ...
- Android:学习AIDL,这一篇文章就够了(上)
前言 在决定用这个标题之前甚是忐忑,主要是担心自己对AIDL的理解不够深入,到时候大家看了之后说——你这是什么玩意儿,就这么点东西就敢说够了?简直是坐井观天不知所谓——那样就很尴尬了.不过又转念一想, ...
- JBoss远程方法调用漏洞利用详解
早上起床打开微博看到空虚浪子心大神发的一篇有关Jboss漏洞的文章,对我等菜鸟来说那边文章看起来还是很吃力的,所以查了查国内外的资料,翻译写了这边文章,记录一下. 在JBoss服务器上部署web应用程 ...
- iOS网络相关零散知识总结
iOS网络相关零散知识总结 1. URL和HTTP知识 (1) URL的全称是Uniform Resource Locator(统一资源定位符). URL的基本格式 = 协议://主机地址/路径 ...