管理文件和文件夹的类型
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. php在循环内外实例化类占用内存比较

    关于php类的实例化和内存的关系,可以这么说:只要有一个new 关键字就是创建一个对象,创建一个对象就是在内存中分配了一个空间. 代码1: 在循环外实例化类:class ABC{ public $nu ...

  2. moodle搭建相关的笔记

    关于moodle内网外网访问问题的解决方案(转) http://blog.chinaunix.net/uid-656828-id-3106027.html

  3. 冒泡排序算法-Python实现

    #-*- coding: UTF-8 -*- import numpy as np def BubbleSort(a): for i in xrange(0, a.size): for j in xr ...

  4. An Introduction to Greta

    I was surprised by greta. I had assumed that the tensorflow and reticulate packages would eventually ...

  5. bzoj4558: [JLoi2016]方

    Description 上帝说,不要圆,要方,于是便有了这道题.由于我们应该方,而且最好能够尽量方,所以上帝派我们来找正方形 上帝把我们派到了一个有N行M列的方格图上,图上一共有(N+1)×(M+1) ...

  6. C++ 函数特性_参数默认值

    函数参数默认值写法 有默认参数值的参数必须在参数表的最右边 ,) // 这是正确的写法 , int k) // 这是错误写法 先声明,后定义 在写函数时要先在代码前面声明,然后再去定义. 函数默认参数 ...

  7. Bootstrap-CL:导航元素

    ylbtech-Bootstrap-CL:导航元素 1.返回顶部 1. Bootstrap 导航元素 本章我们将讲解 Bootstrap 提供的用于定义导航元素的一些选项.它们使用相同的标记和基类 . ...

  8. Creating an Android Project(创建一个android项目)

    一个android项目包含了你的应用程序中的所有源代码文件,我们可以通过android sdk tools轻松地创建一个拥有默认文件跟文件夹的android项目. 这部分课程我们将展示两种创建andr ...

  9. 2017 年 PHP 程序员未来路在何方?

    PHP 从诞生到现在已经有20多年历史,从Web时代兴起到移动互联网退潮,互联网领域各种编程语言和技术层出不穷, Node.js . GO . Python 不断地在挑战 PHP 的地位.这些技术的推 ...

  10. VB.Net与C# 的语法比较

    最近看代码或写代码时,经常把VB与C#的基本语法搞混,为方便查看,特对其异同进行对比: 變數初始化 VB.NET 自動將所有的變數初始化成 0 或 nothing.C# 在你未初始化變數之前不准你用該 ...