.NET基础 (14)管理文件和文件夹的类型

管理文件和文件夹的类型
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

时间: 2024-12-23 17:19:40

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

管理目录与文件(1-4)

一.内核官网 linux内核的官方网站http://www.kernel.org/ 二.切换界面 图形界面-命令行界面    Ctrl+Alt+Fn(F1.F2.F3.F4.F5.F6) 命令行界面-图形界面    Alt+F7 字符-字符        Alt+Fn(F1.F2.F3.F4.F5.F6) 三.常见目录作用 /boot:存放启动linux系统所必需的文件,包括内核文件.启动菜单配置文件等 /bin:存放linux系统中最基本的用户命令,普通用户都有权限执行 /dev:存放linu

linux:文件及文件夹管理

http://blog.csdn.net/pipisorry/article/details/39854265 查看用户的信息 pika:~$id pikauid=1000(pika) gid=1000(pika) groups=1000(pika),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),108(lpadmin),124(sambashare),125(docker) 文件夹与路径 cd:变换目弽pwd:显示弼前目弽mkdir:建立一个新的文

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

当磁盘大小超过标准时会有报警提示,这时如果掌握df和du命令是非常明智的选择. df可以查看一级文件夹大小.使用比例.档案系统及其挂入点,但对文件却无能为力.    du可以查看文件及文件夹的大小. 两者配合使用,非常有效.比如用df查看哪个一级目录过大,然后用df查看文件夹或文件的大小,如此便可迅速确定症结. 下面分别简要介绍 df命令可以显示目前所有文件系统的可用空间及使用情形,请看下列这个例子: 以下是代码片段: [[email protected] ~]$ df -hFilesystem

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

主要内容: 1.枚举查询文件和文件夹 2.文本文件读写的三种方法——创建写入和读取文件 3.获得文件的属性 枚举查询文件和文件夹 先了解一下文件查询的几个方法: StorageFolder.GetFilesAsync: 获取当前文件夹中的所有文件,返回一个 IReadOnlyList<StorageFile>集合 IReadOnlyList<StorageFile> fileList =await picturesFolder.GetFilesAsync(); StorageFol

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

三. 创建文件夹 问题: 你想创建文件夹到磁盘,存储一些文件到里面 解决方案: 使NSFileManager类的实例方法createDirectoryAtPath:withIntermediateDirectories:attributes:error:,代码如下: 1 - (BOOL) application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{ 2 N

C#控制台基础 directory获取一个文件夹下所有文件及文件夹的全名

0 探测的文件夹 1 代码 1 using System; 2 using System.Collections.Generic; 3 using System.IO; 4 using System.Linq; 5 using System.Text; 6 using System.Threading.Tasks; 7 8 namespace ConsoleApplication2 9 { 10 class Program 11 { 12 static void Main(string[] ar

Android 编程之入门开发文件夹管理器开发文件的过滤与排序-3

前面说了文件操作和主界面,接下来说说文件的过滤和排序,我们都知道在我们的设备里,不管是PC还是手机,总有一些我们 看不到的文件夹,那就是所谓的隐藏文件,大部分的隐藏文件,我们是没有权限操作的,所有对我们来说没必要,必须干掉, 还有就是给文件列表排序,方面查找,其实在现在的文件夹管理里,不知道大家有没有发现,就是在界面的最右或者最左边有 一个从A-Z竖向排列的选项,点击每个字母,它会跳到以那个字开头的文件列表项去,这是比较好用的一款东西,因为APP是之 前写的,也就没用到新式的东西了,咱们就说说粗

C#基础 创建文件,文件夹

文件夹,文件这是常见的,怎么创建?要不要先判断是否存在?非常非常基础的知识点 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; namespace dazilianxi.wenjian { public class WenJianLei { const string main_Dir = @"D:/WenTest"; const s

Windows 10开发基础——文件、文件夹和库(二)

主要内容: 使用选取器打开和保存文件 关于文件.文件夹和库,如果深究其实还是有比较多的内容,我们这一次来学习一下选取器就收了.还有上篇博文中读写文本文件的三种方式可以细细体会一下. 文件选取器包含文件打开选取器(FileOpenPicker.FolderPicker)和文件保存选取器(FileSavePicker),分别用来打开文件和保存文件,这两个选取器的使用方法大致相同. FileOpenPicker类: ViewMode ,获取或设置文件选取器用来展示文件或文件夹的视图模式,属性值由Pic