码迷,mamicode.com
首页 > 其他好文 > 详细

如何操作文件和文件夹

时间:2014-08-19 20:31:35      阅读:253      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   使用   io   strong   文件   

分析问题

  1、FileInfo类型。

  FielInfo类型提供了查看状态、创建、复制、删除、移动和打开文件的实例方法,类型的使用方法非常简单,但功能却十分强大。和File类型的区别在于:

  (1)FileInfo可以针对某个文件生成具体的实例,而File是静态类。

  (2)FileInfo致力于操作文件在文件系统中的结构,而File主要致力于文件本身的读写操作。

  FileInfo类型的功能非常强大,以下代码展示了其常用的一些功能。

 

using System.IO;
using System;
namespace Test
{
    class UseFileInfo
    {
        static void Main()
        {
            ProcessFile();

            Console.Read();
        }

        //操作文件的功能
        static void ProcessFile()
        {
            FileInfo info = null;
            FileInfo newInfo = null;
            try
            {
                //创建文件
                info = new FileInfo(@"D:\test1.txt");
                using (FileStream fs=info.Create())
                {

                }
                Console.WriteLine("原始文件:");
                ReadFileInfo(info);
                //移动文件
                info.MoveTo(@"D:\test2.txt");
                Console.WriteLine("移动后的新文件:");
                ReadFileInfo(info);
                //复制文件
                newInfo = info.CopyTo(@"D:\test3.txt");
                Console.WriteLine("复制后的新文件:");
                ReadFileInfo(newInfo);
            }
            finally
            { 
                //删除文件
                if (info!=null)
                {
                    info.Delete();
                }
                if (newInfo!=null)
                {
                    newInfo.Delete();
                }
            }
        }

        //读取文件状态信息的功能
        static void ReadFileInfo(FileInfo fi)
        {
            Console.WriteLine("文件名为:{0}",fi.Name);
            Console.WriteLine("文件在:{0}", fi.DirectoryName);
            Console.WriteLine("文件的长度:{0}", fi.Length);
            Console.WriteLine("文件创建于:{0}", fi.CreationTime);
            Console.WriteLine("文件最后修改时间:{0}", fi.LastWriteTime);
            Console.WriteLine("文件最后访问时间:{0}", fi.LastAccessTime);
            Console.WriteLine("文件的全名是:{0}", fi.FullName);
            Console.WriteLine("文件的扩展名是:{0}", fi.Extension);

        }
    }
}

  如以上代码所示,FileInfo类型对于常用的文件操作提供了非常简单的接口,有几点需要读者注意:

  (1)FileInfo本身不实现读写文件的功能,但它提供了针对某文件创建流类型对象或者读写流类型对象的方法,如Create、AppendText、Open、OpenRead、OpenWrite、OpenText等方法。

  (2)在使用Create方法时,不要遗忘获取返回的流对象并关闭流。例如下面的代码将非常隐蔽地引入一个危险:info.Create();。

  (3)FileInfo不能被继承,事实上该类型已经实现的非常好,基本没有派生的需要。

  下面是以上代码的执行结果:

  bubuko.com,布布扣  

  2、DirectoryInfo类型。

  和FileInfo非常类似,DirectoryInfo致力于封装文件夹的操作,并且提供简便友好的接口。虽然在操作系统层面上,文件和文件夹本身没有很大的区别,但是站在应用层上,文件和文件夹的操作还是截然不同的,这也是.NET小组区分FileInfo和DirectoryInfo的原因。

  以下代码展示了DirectoryInfo的功能。

using System;
using System.IO;

namespace Test
{
    class UseDirectoryInfo
    {
        static void Main()
        {
            ProcessDirectory();

            Console.Read();
        }

        //操作文件夹功能
        static void ProcessDirectory()
        {
            DirectoryInfo di = null;
            try
            {
                //创建文件夹
                di = new DirectoryInfo(@"D:\Test");
                di.Create();
                //为文件夹添加子文件夹
                di.CreateSubdirectory("subDic");
                //为子文件夹添加一个文件
                FileInfo info = new FileInfo(@"D:\Test\subDic\text.txt");
                using (FileStream fs=info.Create())
                {

                }
                //读取文件夹信息
                ReadDirectoryInfo(di);
                //移动文件夹
                di.MoveTo(@"D:\Test2");
            }
            finally
            {
                if (di!=null)
                {
                    //删除文件夹
                    //一起删除了子文件夹和其中的文件
                    di.Delete(true);
                }

            }
        }
        //读取文件夹信息的功能
        static void ReadDirectoryInfo(DirectoryInfo di)
        {
            Console.WriteLine("文件夹名称为:{0}",di.Name);
            Console.WriteLine("父文件夹为:{0}", di.Parent.Name);
            Console.WriteLine("文件夹创建于:{0}", di.CreationTime);
            Console.WriteLine("文件夹最后修改时间:{0}", di.LastWriteTime);
            Console.WriteLine("文件夹最后访问时间:{0}", di.LastAccessTime);
            Console.WriteLine("文件夹全名是:{0}", 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("文件名为:{0}", fi.Name);
            Console.WriteLine("文件在:{0}", fi.DirectoryName);
            Console.WriteLine("文件的长度:{0}", fi.Length);
            Console.WriteLine("文件创建于:{0}", fi.CreationTime);
            Console.WriteLine("文件最后修改时间:{0}", fi.LastWriteTime);
            Console.WriteLine("文件最后访问时间:{0}", fi.LastAccessTime);
            Console.WriteLine("文件的全名是:{0}", fi.FullName);
            Console.WriteLine("文件的扩展名是:{0}", fi.Extension);

        }
    }
}

注意

  文件夹的删除需要传入一个参数,以告诉Delete方法是否需要同时删除子文件和子文件夹。

  DirectoryInfo和FileInfo的使用非常类似,区别在于DirectoryInfo添加了操作文件夹下子文件和文件夹的功能,而没有类似于FileInfo的打开文件等操作。

  下面是以上代码的执行结果:

  bubuko.com,布布扣  

注意

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

答案

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

  

  

 

如何操作文件和文件夹,布布扣,bubuko.com

如何操作文件和文件夹

标签:style   blog   http   color   使用   io   strong   文件   

原文地址:http://www.cnblogs.com/wangjinpeng-study/p/3922883.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!