管理文件和文件夹的类型
1 如何操作文件和文件夹
2 如何实现文件和文件夹的监控功能

管理文件和文件夹的类型
1 如何操作文件和文件夹

.NET内建类中提供了FileInfo和DictionaryInfo两个类型,分别用来操作文件和文件夹。有别于File和Dictionary类型。FileInfo和DictionaryInfo主要的功能在于操作文件和文件夹在文件系统中的结构,完成诸如创建、复制、读取信息、移动、判断是否存在、删除等功能。

示例:

class UseDirectoryInfo
{
static void Main(string[] args)
{
ProcessDirectory();
Console.Read();
}
//操作文件夹的功能
static void ProcessDirectory()
{
DirectoryInfo di = null;
try
{
//创建文件夹
di = new DirectoryInfo("E:\\Test");
di.Create();
//为文件夹添加子文件夹
di.CreateSubdirectory("subdic");
//为子文件夹添加一个文件
FileInfo info = new FileInfo("E:\\Test\\subdic\\text.txt");
using (FileStream fs = info.Create()) { }
//读取文件夹信息
ReadDirectoryInfo(di);
//移动文件夹
di.MoveTo("E:\\Test2");
}
finally
{
if (di != null)
          {
//删除文件夹
di.Delete(true); //一起删除子文件和子文件夹,千万小心!!!
          }
}
}
//读取文件夹状态信息的功能
static void ReadDirectoryInfo(DirectoryInfo di)
{
Console.WriteLine("文件夹名为:" + di.Name);
Console.WriteLine("父文件夹为:" + di.Parent.Name);
Console.WriteLine("文件夹创建于:" + di.CreationTime);
Console.WriteLine("文件夹最后修改时间:" + di.LastWriteTime);
Console.WriteLine("文件夹最后访问时间:" + di.LastAccessTime);
Console.WriteLine("文件夹全名是:" + di.FullName);
Console.WriteLine("文件夹中的文件:");
FileInfo[] fis = di.GetFiles();
foreach (FileInfo fi in fis)
ReadFileInfo(fi);
Console.WriteLine("文件夹中的子文件夹:");
DirectoryInfo[] dis = di.GetDirectories();
foreach (DirectoryInfo sdi in dis)
ReadDirectoryInfo(sdi);
}
//读取文件状态信息的功能
static void ReadFileInfo(FileInfo fi)
{
Console.WriteLine("文件名为:" + fi.Name);
Console.WriteLine("文件在:" + fi.DirectoryName);
Console.WriteLine("文件的长度: " + fi.Length);
Console.WriteLine("文件创建于:" + fi.CreationTime);
Console.WriteLine("文件最后修改时间:" + fi.LastWriteTime);
Console.WriteLine("文件最后访问时间:" + fi.LastAccessTime);
Console.WriteLine("文件全名是:" + fi.FullName);
Console.WriteLine("文件扩展名是:" + fi.Extension);
}
}

输出:

文件夹名为:Test
父文件夹为:E:\
文件夹创建于:2015/8/16 23:58:21
文件夹最后修改时间:2015/9/10 17:17:09
文件夹最后访问时间:2015/9/10 17:17:09
文件夹全名是:E:\Test
文件夹中的文件:
文件名为:person.txt
文件在:E:\Test
文件的长度: 1092
文件创建于:2015/8/16 23:59:30
文件最后修改时间:2015/8/17 2:02:07
文件最后访问时间:2015/8/16 23:59:30
文件全名是:E:\Test\person.txt
文件扩展名是:.txt
文件夹中的子文件夹:
文件夹名为:subdic
父文件夹为:Test
文件夹创建于:2015/9/10 17:17:09
文件夹最后修改时间:2015/9/10 17:17:09
文件夹最后访问时间:2015/9/10 17:17:09
文件夹全名是:E:\Test\subdic
文件夹中的文件:
文件名为:text.txt
文件在:E:\Test\subdic
文件的长度: 0
文件创建于:2015/9/10 17:17:09
文件最后修改时间:2015/9/10 17:17:09
文件最后访问时间:2015/9/10 17:17:09
文件全名是:E:\Test\subdic\text.txt
文件扩展名是:.txt
文件夹中的子文件夹:

FileInfo和DictionaryInfo的操作涉及资源争用,并且不能保证文件夹或文件的存在,一般所有的操作需要包含在try、catch、finally块内。

2 如何实现文件和文件夹的监控功能

.NET提供了FileSystemWatcher类型俩实现文件系统的监控。通过控制监控目录、控制类型和回调方法,就可以方便地实现监控的功能,但需要小心FileSystemWatcher缓存溢出的情况。

FileSystemWatcher会维护一个内部缓冲来接受文件系统的修改通知,但短时间内文件系统的修改过多时,缓冲就会溢出,导致某些修改被丢失。可以通过InternalBufferSize来修改内部缓存的大小,但这对性能影响非常大,建议从加快处理速度、减小监控范围等方面来避免文件修改事件的丢失。

示例:

    class UseFS_fsw
{
//退出程序命令
private const String Exit = "exit";
//监视的文件夹
private const String Folder = "E:\\Test";
private FileSystemWatcher _fsw; public UseFS_fsw()
{
_fsw = new FileSystemWatcher();
//建立检测文件夹
if (Directory.Exists(Folder))
Directory.Delete(Folder, true);
Directory.CreateDirectory(Folder);
_fsw.Path = Folder; //这里选择最后访问文件时间、最后写文件时间、
//文件名、文件夹名变化时,触发事件
_fsw.NotifyFilter = NotifyFilters.LastAccess
| NotifyFilters.LastWrite
| NotifyFilters.FileName
| NotifyFilters.DirectoryName;
//这里选择检测所有的zip文件
_fsw.Filter = "*.zip";
//为这些事件添加处理方法。.
_fsw.Changed += new FileSystemEventHandler(OnChanged);
_fsw.Created += new FileSystemEventHandler(OnChanged);
_fsw.Deleted += new FileSystemEventHandler(OnChanged);
_fsw.Renamed += new RenamedEventHandler(OnRenamed);
//这里开始所有事件会被触发
_fsw.EnableRaisingEvents = true;
} //处理变化时间,变化可以包含创建、修改和删除
private void OnChanged(object source, FileSystemEventArgs e)
{
Console.WriteLine("文件: " +
e.FullPath + " " + e.ChangeType);
}
//处理重命名事件
private static void OnRenamed(object source, RenamedEventArgs e)
{
Console.WriteLine("文件: {0} 重命名为: {1}",
e.OldFullPath, e.FullPath);
} static void Main(string[] args)
{
try
{
UseFS_fsw ws = new UseFS_fsw();
while (Console.ReadLine() != Exit) ;
}
finally
{
//清理测试数据
if (Directory.Exists(Folder))
Directory.Delete(Folder, true);
}
}
}

在文件夹中创建t.zip,重命名为t1.zip,修改内容,删除,输出如下:

文件: E:\Test\t.zip Created
文件: E:\Test\t.zip 重命名为: E:\Test\t1.zip
文件: E:\Test\t1.zip Changed
文件: E:\Test\t1.zip Deleted

转载请注明出处:

作者:JesseLZJ
出处:http://jesselzj.cnblogs.com

.NET基础 (14)管理文件和文件夹的类型的更多相关文章

  1. Linux命令(14)文件和文件夹权限管理:chmod

    linux文件和文件夹权限简介: chmod命令用于改变linux系统文件或目录的访问权限.用它控制文件或目录的访问权限. Linux系统中的每个文件和目录都有访问许可权限,用它来确定谁可以通过何种方 ...

  2. 探索Windows命令行系列(4):通过命令管理文件和文件夹

    1.文件夹操作 1.1.DIR(directory)命令 1.2.TREE 命令 1.3.CD(change directory)命令 1.4.MD(make directory)命令 1.5.RD( ...

  3. linux:文件及文件夹管理

    http://blog.csdn.net/pipisorry/article/details/39854265 查看用户的信息 pika:~$id pikauid=1000(pika) gid=100 ...

  4. 【Linux/Ubuntu学习 14】Linux下查看文件和文件夹大小

    当磁盘大小超过标准时会有报警提示,这时如果掌握df和du命令是非常明智的选择. df可以查看一级文件夹大小.使用比例.档案系统及其挂入点,但对文件却无能为力.    du可以查看文件及文件夹的大小. ...

  5. Windows 10开发基础——文件、文件夹和库(一)

    原文:Windows 10开发基础--文件.文件夹和库(一) 主要内容: 1.枚举查询文件和文件夹 2.文本文件读写的三种方法——创建写入和读取文件 3.获得文件的属性 枚举查询文件和文件夹 先了解一 ...

  6. 【穿插】Python基础之文件、文件夹的创建,对上一期代码进行优化

    在上一期妹子图的爬虫教程中,我们将图片都保存在了代码当前目录下,这样并不便于浏览,我们应该将同一个模特的图片都放在一个文件夹中. 今天我们就简单讲一下Python下如何创建文件.文件夹,今后就可以用上 ...

  7. Android终端管理器删除文件夹

    终端管理器删除文件夹不能用网上提供的: rm -rf 文件夹名 而要用: rm -r 文件夹名. http://blog.csdn.net/enhancing/article/details/8490 ...

  8. 总结删除文件或文件夹的7种方法-JAVA IO基础总结第4篇

    本文是Java IO总结系列篇的第4篇,前篇的访问地址如下: 总结java中创建并写文件的5种方式-JAVA IO基础总结第一篇 总结java从文件中读取数据的6种方法-JAVA IO基础总结第二篇 ...

  9. [iOS翻译]《iOS 7 Programming Cookbook》:iOS文件与文件夹管理(下)

    三. 创建文件夹 问题: 你想创建文件夹到磁盘,存储一些文件到里面 解决方案: 使NSFileManager类的实例方法createDirectoryAtPath:withIntermediateDi ...

随机推荐

  1. CCFLOW5 SDK 模式 开发环境配置

    在群里和论坛里问了N次都没有人回答,最终在QQ好友[冥(276669806) ]的帮助下成功配置了SDK开发环境.现将具体配置步骤分享给大家.1.打开VS2010 新建一个网站项目2.将CCFlow\ ...

  2. GIT-查看config配置信息

    config 配置指令 1 git config config 配置有system级别 global(用户级别) 和local(当前仓库)三个 设置先从system->global->lo ...

  3. IntelliJ IDEA、JetBrains PyCharm 注册码-收藏

    IntelliJ IDEA JetBrains PyCharm 注册码 http://idea.lanyus.com/ CNEKJPQZEX-eyJsaWNlbnNlSWQiOiJDTkVLSlBRW ...

  4. javascript系列--Object.assign实现浅拷贝的原理以及实现

    一.前言 之前在前面一篇学习了赋值,浅拷贝和深拷贝.介绍了这三者的相关知识和区别. 传送门:https://www.mwcxs.top/page/592.html 本文会介绍浅拷贝Object.ass ...

  5. Bootstrap-Plugin:提示工具(Tooltip)插件

    ylbtech-Bootstrap-Plugin:提示工具(Tooltip)插件 1.返回顶部 1. Bootstrap 提示工具(Tooltip)插件 当您想要描述一个链接的时候,提示工具(Tool ...

  6. 中信信用卡淘气金卡,V金卡,大众点评金卡,易卡白金卡

    中信 | 谈谈经典多倍积分卡:易卡&悦卡(超详细+图解+思考)! http://www.flyertea.com/thread-1972766-1-1.html 易卡积分测试,购物/机票/外卖 ...

  7. MVVMLight介绍以及在项目中的使用

    http://www.des8.me/detail-1822826.html 一.MVVM 和 MVVMLight介绍 MVVM是Model-View-ViewModel的简写.类似于目前比较流行的M ...

  8. 31_java之项目中的数据库操作

    01项目训练目标 * A: 项目训练目标 * a: 项目目标 * 综合运用前面所学习的知识点 * 熟练View层.Service层.Dao层之间的方法相互调用操作. * 熟练dbutils操作数据库表 ...

  9. django2.0表的ORM字段类型和展示

    django2.0表的ORM字段类型和展示 思路整理 今天想给博客的文章添加增加一个分类字段 但是不知道这种后台字段生成的字段,样式怎么处理 后来找到了,就是在定义模型的字段定义的时候 决定样式 mo ...

  10. js中的event

    event代表事件的状态,例如触发event对象的元素.鼠标的位置及状态.按下的键等等.event对象只在事件发生的过程中才有效.event的某些属性只对特定的事件有意义.比如,fromElement ...