管理文件和文件夹的类型
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. IDA python使用笔记

    pattern='20 E5 40 00' addr=MinEA() for x in range(0,5):     addr=idc.FindBinary(addr,SEARCH_DOWN,pat ...

  2. Solr聚合查询

    1  分组查询 概述:Solr常用的分组查询有两种,Facet分组和Group分组,分别以下列出这两种查询:   1.1     Facet分组 solr种以导航为目的的查询结果成为facet,在用户 ...

  3. 3_bootsrap布局容器

    3.布局容器 BootStrap必须需要至少一个布局容器,才能为页面内容进行封装和方便的样式控制. 相当于一个画板. 帮助手册位置:全局CSS样式------->概览------->布局容 ...

  4. Selenium Webdriver——处理Table

    html table是由 table 元素以及一个或多个 tr.th 或 td 元素组成.如下: HTML源码如下: <html> <head> <meta http-e ...

  5. 用MyEclipse JPA创建项目

    http://www.myeclipsecn.com/learningcenter/persistence-development/myeclipse-jpa/ 用MyEclipse JPA创建项目 ...

  6. 【319】Python 通过 Twilio 发短信

    参考:python利用twilio模块给自己发短信 参考:使用python实现往手机发短信(基于twilio) 步骤如下: 登录 Twilio 网站注册,貌似需要***,包括用户名.密码.手机号.项目 ...

  7. 迷你MVVM框架 avalonjs 1.3.4发布

    发现一个以前从来没发现的大BUG,紧急发布此版本. fix getEachProxy BUG,此BUG会导致监控数组在删除某元素然后再添加元素时出现问题. avalon ms-on-*绑定添加一个钩子 ...

  8. Centos7手动编译安装Python3

    Python3的安装方式非常的简单,首先去到Python下载目录下载想要的Python包,这里我选择了3.6.5版本 $ wget https://www.python.org/ftp/python/ ...

  9. maven使用阿里云maven库

    在maven\conf\settings.xml中的mirrors添加 <mirror> <id>nexus-aliyun</id> <name>Nex ...

  10. python's import mechanism

    [python's import mechanism] 问题描述: [A.py] from B import D class C:pass [B.py] from A import C class D ...