如何操作文件和文件夹

分析问题

  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不能被继承,事实上该类型已经实现的非常好,基本没有派生的需要。

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

    

  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的打开文件等操作。

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

    

注意

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

答案

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

  

  

如何操作文件和文件夹

时间: 2024-10-17 18:25:56

如何操作文件和文件夹的相关文章

用python操作文件和文件夹

我有一堆层级3到4级的文件夹,这里面存有的一些文件是我需要的,一些是我不需要的.需要的文件都存储在名字中有'Data'的文件夹内.现在我需要把这些文件提取(拷贝)到一个指定的文件夹里. 一个文件夹一个文件夹去点开是一种方法,但是对于层级比较深的文件夹是一件很枯燥的事情. 本着一切尽量自动化的原则,我用python来做这件事情. 这个需求归纳下来需要: 从一个起始目录开始 遍历每一个文件夹 如果文件夹的名字中有'Data',拷贝它的内容至目标文件夹 python对文件.文件夹的操作是非常常见的需求

java文件操作 之 创建文件夹路径和新文件

一:问题 java 的如果文件夹路径不存在,先创建:如果文件名 的文件不存在,先创建再读写;存在的话直接追加写,关键字true表示追加 二:代码实现 package edu.tju.cs; import java.io.File; import java.io.FileNotFoundException; import java.io.FileWriter; import java.io.IOException; import java.io.RandomAccessFile; public c

文件和文件夹操作

一.文件操作 1.File类的常用静态方法: void AppendAllText(string path, string contents),将文本contents附加到文件path中 bool Exists(string path)判断文件path是否存在 string[] ReadAllLines(string path) 读取文本文件到字符串数组中 string ReadAllText(string path) 读取文本文件到字符串中 void WriteAllText(string p

linux —— 学习笔记(文件、文件夹操作)

目录:1.常用的文件文件夹操作 2.文件属性的设置 1.常用的文件文件夹操作 mkdir  创建文件夹 -p 如果指定 a/b/c 时 a .b 不存在,一起创建出来 cp       复制文件或文件夹 -r 复制文件夹 rmdir   删除空的文件夹 -p 类似于mkdir 沿途为空则一起删除 rm       删除文件或文件夹 -rf 递归静默删除 mv      移动文件(重命名)       如果目标和源 目录未改变,则移动的效果为重命名 2.文件属性的设置 chmod  改变文件的mo

PYTHON对文件及文件夹的一些操作

python中对文件.文件夹的操作需要涉及到os模块和shutil模块. 创建文件:1) os.mknod("test.txt") 创建空文件2) open("test.txt",w)           直接打开一个文件,如果文件不存在则创建文件 创建目录:os.mkdir("file")                   创建目录 复制文件:shutil.copyfile("oldfile","newfile&

linux 下文件及文件夹操作常用命令

文件及文件夹操作 1.创建文件夹 " mkdir 文件夹名 " 这样就会在当前目录创建一个文件夹. 2.复制文件 cp 3.剪切 mv 编辑文件内容 vi 或vim 一般来说vi是基本功能,vim比vi功能强大一些. 一些基本的操作是 打开或新新文件   vi 文件路径 打开时是只读模式,要写编辑先输入一个i 这时就是插入模式 就可以录入你想录的信息了. 当录完后,可以保存退出,方法是 先按"ESC"退出插入模式,然后 输入 :wq  然后回车,就保存退出了. 也可

python中对文件、文件夹的操作需要涉及到os模块和shutil模块。

创建文件:1) os.mknod("test.txt") 创建空文件2) open("test.txt",w) 直接打开一个文件,如果文件不存在则创建文件 创建目录:os.mkdir("file") 创建目录 创建多层新目录:def mkdirs(path): # 去除首位空格 path=path.strip() # 去除尾部 \ 符号 path=path.rstrip("\\") # 判断路径是否存在 # 存在 True #

WPF文件和文件夹的操作

1.对文件的操作 private void button_chose_Click(object sender, RoutedEventArgs e) { var openFileDialog = new Microsoft.Win32.OpenFileDialog() { Filter = "Excel Files (*.sql)|*.sql" }; var result = openFileDialog.ShowDialog(); if (result == true) { this

无法更新运行时文件夹共享状态:在客户机操作系统内装载共享文件夹文件系统时出错--解决办法

1.问题描述: 在物理主机和虚拟机CentOS6.4共享文件的时候出现:无法更新运行时文件夹共享状态:在客户机操作系统内装载共享文件夹文件系统时出错 其他症状: vmware-hgfsclient  能够看到共享的文件夹名字 mount.vmhgfs  .host:/ /mnt  报错: Error: cannot mount filesystem: No such device 2.解决思路 /etc/vmware-tools/services.sh restart 如果出现FAILD yum

iOS开发——Swift篇&文件,文件夹操作

文件,文件夹操作 ios开发经常会遇到读文件,写文件等,对文件和文件夹的操作,这时就可以使用NSFileManager,NSFileHandle等类来实现. 下面总结了各种常用的操作: 1,遍历一个目录下的所有文件 1 //假设用户文档下有如下文件和文件夹[test1.txt,fold1/test2.txt] 2 let manager = NSFileManager.defaultManager() 3 let urlForDocument = manager.URLsForDirectory