目录

前言

  管理文件系统主要是对计算机中文件和目录的管理,例如,读取文件信息、删除文件和读取目录信息等。这些功能的实现主要是由System.IO命名空间下的类对文件和目录进行操作

  System.IO命名空间为目录和文件的操作提供了必要的类、方法和属性

Directory类和DirectoryInfo类

  在System.IO命名空间中,提供了Directory类和DirectoryInfo类来进行目录管理。使用这两个类可以完成对目录及其子目录的创建、移动、浏览等操作,甚至还可以定义隐藏目录和只读目录

  Directory类的所有方法都为静态方法,因此无需创建对象即可调用,这些方法可以操纵和查询任何目录的信息;而DirectoryInfo类需要有实例成员才可以调用其方法,从而有效地对一个目录进行多种操作。DirectoryInfo类实例化后,还可以通过其属性获取目录的创建时间和最后修改时间等状态

  

  1、DirectoryInfo类的常用属性

  DirectoryInfo类的属性可以获取或设置当前目录的相关属性,下面创建一个示例,使用Attributes等属性设置并获C:\Users\Eniac\Desktop\TestDirectory目录的相关属性信息,代码如下:

string dirPath = "C:\\Users\\Eniac\\Desktop\\TestDirectory";    //目录的绝对路径
if (Directory.Exists(dirPath))     //如果目录存在
{
DirectoryInfo info = new DirectoryInfo(dirPath); //初始化当前目录实例
info.Attributes = FileAttributes.ReadOnly | FileAttributes.Hidden; //利用Attributes属性设置目录为只读和隐藏
   /*利用DirectoryInfo实例的属性获得当前目录的信息*/
label1.Text += "全部名称 : " + info.FullName + "\n";
label1.Text += "目录创建时间 : " + info.CreationTime.ToString() + "\n";
label1.Text += "最后一次访问该目录的时间: " + info.LastAccessTime.ToString() + "\n";
label1.Text += "最后一次修改目录时间 : " + info.LastWriteTime.ToString() + "\n";
label1.Text += "DirectoryInfo实例名称 : " + info.Name + "\n";
label1.Text += "父目录 : " + info.Parent + "\n";
label1.Text += "路径根部分 : " + info.Root.ToString() + "\n";
}
else
{
label1.Text = "该目录不存在,请检验路径是否正确";
}

  执行结果如下图:

    

  2、Directory类的常用方法

  (1)Exists方法

  Exists方法接收一个参数,该参数表示包含当前目录路径的字符串,Exists方法返回结果指示目录是否存在,如果存在,返回true,否则返回false。如上例if语句的判别条件:

if (Directory.Exists(dirPath))     //如果目录存在

  (2)CreatDirectory方法

  CreatDirectory方法接受一个创建目录路径的String类型参数,该方法会根据此路径创建新目录,并且该方法返回一个DirectoryInfo实例,如果创建的目录已经存在,则返回代表指定目录的类实例,不会创建目录,也不会产生异常。通常用法如下:

if (!Directory.Exists(dirPath))   //如果目录不存在就创建目录
{
Directory.CreateDirectory(dirPath);
}

  (3)Delete方法

  Delete方法可以删除指定的目录,该方法为一个重载方法,可以接收一个参数或两个参数。当方法接收一个参数时,该参数为指定目录的路径,这种情况下只能删除指定的空目录,如果目录不空,系统会抛出异常;当该方法接收两个参数时,第二个参数为bool值,如果为true,则可以删除非空目录。通常用法如下:

if(Directory.Exists(dirPath))    //如果目录存在
{
try
{
Directory.Delete(dirPath,true);//删除目录以及目录中所有的子目录和文件
}
catch(Exception ex) //当出现异常时,系统抛出异常
{
MessageBox.Show(ex.Message.ToString());
}
}

  (4)Move方法

  Move方法表示将指定目录移动到新位置,并提供指定新目录名。该方法能够接收两个参数,其中第一个参数表示要移动的目录路径,第二个参数表示目标路径(加上指定的新目录名),当要移动的目录和目标路径的父目录相同时,Move就不再移动目录而是重命名目录。Move方法不能把目录在不同的逻辑驱动器之间进行移动,格式如下:

string dirPath1 = "C:\Users\Eniac\Desktop\dir1";
string dirPath2 = "C:\Program Files\dir2";
Directory.Move(dirPath1,dirPath2); //把目录dir1移动到C:\Program Files目录下并重命名为dir2

  另外Directory类还有以下方法,就不一一详细介绍了:

Directory.GetFiles(dirPath);  //获取指定目录中所有文件的文件名(文件列表,包含子目录)
Directory.GetDirectories(dirPath);  //获取指定目录下所有子目录名
Directory.GetFileSystemEntries(dirPath); //获取指定目录中的所有子目录名及文件名

  

  上述三个方法均有多参数的重载方法,用于在指定目录下搜索相关文件或子目录,多出来的参数表示指定目录下的搜索模式匹配

  DirectoryInfo类中还有一些方法,DirectoryInfo类对象通过使用这些方法可以操作当前文件,这些方法的使用跟Directory类的方法很类似,并且有很多功能也是相同的。具体使用时,如果用户打算多次重用某个对象,可以考虑使用DirectoryInfo的实例方法,而不是Directory类相应的静态方法,因为DirectoryInfo的实例方法并不总是需要进行安全检查,默认情况下,该类将向所有用户授予对新目录的完全读/写访问权限

  由于DirectoryInfo类中的方法和Directory类的方法有很多相似之处,只是调试的方式不同,在此就不再对该类中的方法进行讲解

    

File类和FileInfo类

  System.IO命名空间的File类和FileInfo类提供有关文件管理的相关内容,例如创建、删除、移动和打开文件等

  File类的操作方式与Directory类相似,File类中的方法大多都为静态方法;而FileInfo类和上文中讲解的DirectoryInfo类相似,只有在实例化的情况下才可以使用其属性和方法

  1、FileInfo类的常用属性

  FileInfo类主要用于对实例对象的操作,跟DirectoryInfo类的操作方式比较相似,该类提供了很多属性,通过FileInfo类的属性可以获得文件的相关信息。我们通过下面的程序简单了解一下FileInfo类的属性:

private void button1_Click(object sender, EventArgs e)//选择文件
{
/*此处用到了一个OpenFileDialog控件*/
if (openFileDialog1.ShowDialog() != DialogResult.OK)//打开失败则退出
{
return;
}
textBox1.Text = openFileDialog1.FileName;//把选中文件的绝对路径填入文本框
} private void button2_Click(object sender, EventArgs e)//获取详细信息
{
string filePath = textBox1.Text; //文件的绝对路径
FileInfo info = new FileInfo(filePath);//初始化当前文件实例
label1.Text += "········文件名称: " + info.Name + "\n";
label1.Text += "······文件完整路径: " + info.FullName + "\n";
label1.Text += "····所在目录完整路径: " + info.DirectoryName + "\n";
label1.Text += "·······文件扩展名: " + info.Extension + "\n";
label1.Text += "········文件大小: " + info.Length / 1024 + "KB\n";
label1.Text += "······文件创建时间: " + info.CreationTime.ToString() + "\n";
label1.Text += "最后一次访问该文件的时间: " + info.LastAccessTime.ToString() + "\n";
label1.Text += "·最后一次写入该文件时间: " + info.LastWriteTime.ToString() + "\n";
label1.Text += "·····文件是否为只读: " + info.IsReadOnly + "\n";
}

  执行结果如下图:

  2、File类的常用方法

  下面列出了File类的常用方法:

File.Exists(filePath);  //用于判定指定文件是否存在
File.Create(filePath);  //在指定路径中创建文件
File.Delete(filePath);  //删除指定文件
File.Move(filePath1,filePath2);//把filePath1文件移动到指定的filePath2路径
File.Copy(filePath1,filePath2);//把filePath1文件复制到指定的filePath2路径
File.AppendAllText(filePath,String);//将字符串(第二个参数)追加到指定文件中,若文件不存在则此方法先创建文件再追加
File.ReadAllLines(filePath);//一次性读取指定文件的所有行,返回一个字符串数组,数组元素是每一行的内容
File.ReadAllText(filePath);//一次性读取指定文件的所有内容,返回一个包含全部文本内容的字符串
File.WriteAllLines(filePath,String[]);//一次将字符串数组的每一个元素作为一行写入指定文件
File.WriteAllText(filePath,String);//一次性将字符串(第二个参数)写入指定文件

  上述后四种方法适用于文件读写的内容不是很多的情况下,在文件读写的时候会细讲

  FileInfo类中还有一些方法,FileInfo类对象通过使用这些方法可以操作当前文件,这些方法的使用跟File类的方法很类似,并且有很多功能也是相同的。具体使用时,如果用户打算多次重用某个对象,可以考虑使用FileInfo的实例方法,而不是File类相应的静态方法,因为FileInfo的实例方法并不总是需要进行安全检查,默认情况下,该类将向所有用户授予对新文件的完全读/写访问权限

  由于FileInfo类中的方法和File类的方法有很多相似之处,只是调试的方式不同,在此就不再对该类中的方法进行讲解

    

Path类

  Path类对包含文件或目录路径信息的String实例执行操作,并且以跨平台的方式执行这些操作。在不用的平台上,表示路径的字符串可能不相同,文件的扩展名格式也不相同,因为这些不同Path类的字段以及Path类的某些成员的行为与平台相关

  Path类的所有成员(方法和属性)都是静态的,因此无需具有路径的实例即可被调用,这些成员使用户可以快速方便地执行常见操作,例如确定文件扩展名是否是路径的一部分,以及将两个字符串合成一个路径名

  下面列出了Path类常用的方法及说明:

Path.GetExtension(path);  //返回指定路径字符串的扩展名
Path.GetFileNameWithoutExtension(path);//返回不具有扩展名的指定路径字符串的文件名
Path.GetFileName(path);  //返回具有扩展名的指定路径字符串的文件名
Path.GetFullPath(path);  //返回指定路径字符串的绝对路径
Path.ChangeExtension(path,extension);//更改路径字符串的扩展名

C#文件系统管理【转】的更多相关文章

  1. Linux磁盘及文件系统管理

    在LINUX中我们知道一个很重要的概念,那就是"一切皆文件",这里的一切表示所有在LINUX系统的对象,自然也包括了LINUX中的硬盘设备.在LINUX中所有设备都被抽象成一个文件 ...

  2. linux下fdisk分区管理、文件系统管理、挂载文件系统等

    分区管理工具有:fdisk, parted, sfdisk fdisk:对于一块硬盘来讲,最多只能管理15分区: # fdisk -l [-u] [device...]  查看硬盘设备分区信息 # f ...

  3. 【linux相识相知】磁盘分区及文件系统管理详解

    磁盘,提供持久的数据存储,它不像我们的内存,如果突然断电了,在内存中的数据一般都会被丢掉了,内存中的数据在保存的时候,会被写到硬盘里面,磁盘也是一种I/O设备. 我们都知道磁盘分区完成之后,还要进行格 ...

  4. linux(3)磁盘与文件系统管理/查看硬盘、内存空间/文件系统的操作/ 文件的压缩和打包

    一.磁盘与文件系统管理 1.分区与文件系统分区:记录每一个分区的开始柱面和结束柱面主引导区(master boot recorder):记录分区的数据,记录硬盘里所有的分区信息分区划分好后,要将分区格 ...

  5. Linux系列教程(十八)——Linux文件系统管理之文件系统常用命令

    通过前面两篇博客,我们介绍了Linux系统的权限管理.Linux权限管理之ACL权限 介绍了通过设定 ACL 权限,我们为某个用户指定某个文件的特定权限,这在Linux只能对于一个文件只能有所有者权限 ...

  6. Linux之磁盘与文件系统管理

    磁盘及文件系统管理详解 [参考文献:马哥视频] 原文:http://blog.csdn.net/u013008795/article/details/51150075 目前市场上主流的磁盘是机械式硬盘 ...

  7. Linux文件系统管理命令(第二版)

    Linux文件系统管理命令 常用命令 1.df命令 查看分区使用情况 常用选项 -h 比较人性化 -m 以兆字节显示分区使用情况 显示信息: Mounted on:挂载点 Filesystem:对应的 ...

  8. uni-app调用原生的文件系统管理器(可选取附件上传)

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  9. linux btrfs文件系统管理与应用

    btrfs文件系统管理与应用 1.btrfs文件系统 基本介绍 btrfs文件系统在CentOS7.x上属于技术预览版 btrfs文件系统英文名:B-tree  FileSystem或者Butter ...

  10. Linux:Day7(下) 磁盘管理、文件系统管理

    Linux入门 Linux系统管理: 磁盘管理.文件系统管理 RAID基本原理.LVM2 网络管理:TCP/IP协议.Linux网络属性配置 程序包管理:rpm,yum 进程管理:htop,glanc ...

随机推荐

  1. CountDownLatch 使用方法

    CountDownLatch 使用方法 import java.util.concurrent.CountDownLatch; public class TestCountDownLatch { pu ...

  2. Java Stream简介, 流的基本概念

    在Javaor .net编程中,  我们经常见到"stream" 这个字眼. 我们大概知道这是个流的意思, 如果看完本文的话, 应该会有1个大概的概念. 一, Java中什么是St ...

  3. python 2 如何安装 MySQL 数据库操作库

    我试了好几种网上的办法,在 windows 10 VS2017 环境下不是缺了头文件,就是缺 .lib,反正十分繁琐,以后我也懒得搞了,都用 annaconda 来搞定就好了,时间宝贵. 在 控制台中 ...

  4. 深入浅出Spring(二) IoC详解

    上次的博客深入浅出Spring(一)Spring概述中,我给大家简单介绍了一下Spring相关概念.重点是这么一句:Spring是为了解决企业应用开发的复杂性而创建的一个轻量级的控制反转(IoC)和面 ...

  5. linux——(4)磁盘与文件系统管理

    概念一:linux-ext2文件系统 ext2在分区的时候会分成多个组块(block group)和一个启动扇区(boot sector),每一个组块内又有superblock.File system ...

  6. ESXI 5.5卡在LSI_MR3.V00

    方法一 故障现象 此问题无论使用VMware官方镜像还是HP的自定义镜像都会出现一下情况并卡着不动.(此文档普遍存在各种服务器上,包括其它厂商服务器) 故障原因: 故障原因VMware官方和HP官方并 ...

  7. React Native 系列(八)

    前言 本系列是基于React Native版本号0.44.3写的.我们都知道,一个App不可能只有一个不变的界面,而是通过多个界面间的跳转来呈现不同的内容.那么这篇文章将介绍RN中的导航. 导航 什么 ...

  8. pair 对组

    pair 对组 c++ 基础 2016-05-10 19:42 154人阅读 评论(0) 收藏 举报  分类: 头文件的函数精粹(12)  版权声明:本文为博主原创文章,未经博主允许不得转载. 与关联 ...

  9. MySQL笔记(四)之内建函数

    AVG() 函数 AVG 函数返回数值列的平均值.NULL 值不包括在计算中. 语法: SELECT AVG(列) FROM 表: COUNT() 函数 COUNT() 函数返回匹配指定条件的行数. ...

  10. bzoj4144 [AMPPZ2014]Petrol

    link 题意: 给一个n个点m条边的带权无向图,其中k个点是加油站,每个加油站可以加满油,但不能超过车的油量上限.有q个询问,每次给出x,y,b,保证x,y都是加油站,问一辆油量上限为b的车从x出发 ...