您的位置:首页 > 编程语言 > C#

C#之IO类库(一)——操作文件系统

2013-04-09 09:36 246 查看
C#的IO类库提供了丰富的IO操作,下面我来总结一下其IO类库提供的一些操作文件系统的方法
一.操作驱动器

C#用DriveInfo来操作驱动器

1.创建对象

a.我们可以通过静态方法DriveInfo.GetDrives()来获取所有的Driver。

b.可以以Drive Letter为参数新建DriveInfo对象,注意DNS路径不能作为参数。

c.此外,我们还可以通过Directory.GetLogicalDrives()先获取机器上所有Driver的Driver letter,再用它新建DriveInfo对象以操作所有的Driver。
2.获取驱动器的状态

我们通过DriveInfo对象来获取驱动器的状态,可以获取的状态有

AvailableFreeSpace:获取当前用户被分配的可用空间大小(bytes)

TotalFreeSpace:获取所有可用空间大小(bytes)

TotalSize:获取总大小(bytes)

DriveFormat:返回FAT, NTFS等值

DriveType:返回DriveType类型的Enum值,可以是CDRom, Fixed, Network, NoRootDirectory, Ram, Removable,或者Unknown

IsReady:对Removable和CD-ROM来说只有相应的设备可以访问了才返回true,当该属性为false时,很多其他属性无法获取

Name:盘符名

RootDirectory:返回Driver所代表的路径的Directory对象。

VolumeLabel:返回VolumeLabel信息,VolumeLabel就是咱自己对盘符定义的名字
二.操作文件夹

C#提供了DirectoryInfo和Directory两个类来操作文件夹,这两个类提供了很多相同的方法,他们的区别在于DirectoryInfo是先构造一个文件夹对象,再对这个对象进行操作。而Directory提供的大多数都是静态函数,这样能够直接根据给定的文件夹路径进行相应的操作。在对文件夹进行多个操作时最好用DirectoryInfo,而只进行一个操作,最好用Directory。

1.构造对象

DirectoryInfo需要先构造文件夹对象,再获取文件夹属性,或者对文件夹进行操作。它的构造方法不负责判断路径是否存在。

Directory不需要构造文件夹对象,直接传入文件夹的路径进行操作
2.判断文件夹是否存在

DirectoryInfo对象可通过查看Exists属性查看文件夹是否存在

Directory可通过Exists方法查看文件夹是否存在
3.获取文件夹属性

注意,在用DirectoryInfo和Directory类获取文件夹属性前最好先判断其是否存在

对DirectoryInfo对象,在获取文件夹属性前应先用refresh函数刷新,可以访问文件夹的下列属性:

Attributes:archive, compressed, directory, hidden, offline, read-only, system, 和temporary的或值

CreationTime

CreationTimeUtc

LastAccessTime

LastAccessTimeUtc

LastWriteTime

LastWriteTimeUtc
Directory也可获取上述属性,不过是用静态函数获取,另外Directory也不支持获取Attribute。

SetCreationTime 

SetCreationTimeUtc 

SetLastAccessTime 

SetLastAccessTimeUtc 

SetLastWriteTime 

SetLastWriteTimeUtc 

GetCreationTime 

GetCreationTimeUtc 

GetLastAccessTime 

GetLastAccessTimeUtc 

GetLastWriteTime 

GetLastWriteTimeUtc
4.路径操作

DirectoryInfo和Directory类都支持路径操作,这些操作只针对传入的路径字符串,和文件夹是否存在无关

DirectoryInfo有下面一些属性

Name

Extension

FullName

Parent

Root
Directory有下面一些方法

GetParent:获取父目录的DirectoryInfo对象

GetDirectoryRoot
5.新建,移动,删除文件夹

DirectoryInfo和Directory类都支持文件夹的新建,移动,删除

DirectoryInfo的方法

Create,CreateSubdirectory,Delete,MoveTo
Directory的方法

CreateDirectory 

Delete   

Move
6.遍历文件夹下的内容

DirectoryInfo和Directory类都支持遍历文件夹下的内容,而且都支持通过传入searchpattern和searchOption来定义遍历的行为,对于searchpattern,*匹配一个或多个字符,?匹配一个字符。searchOption的值是TopDirectory或AllDirectories,用来控制匹配的时候要不要包括子目录。

DirectoryInfo的方法:

EnumerateDirectories

EnumerateFiles

EnumerateFileSystemInfos

GetDirectories

GetFiles

GetFileSystemInfos
Directory的方法

GetDirectories 

GetFiles 

GetFileSystemEntries

EnumerateDirectories 

EnumerateFiles 

EnumerateFileSystemEntries
7.获取和设置当前的工作路径

Directory有两个重要的方法:

GetCurrentDirectory:获取当前的工作路径

SetCurrentDirectory:设置当前的工作路径
三.操作文件

C#提供了FileInfo和File两个类来操作文件,这两个类提供了很多相同的方法,他们的区别在于FileInfo是先构造一个文件对象,再对这个对象进行操作。而File提供的大多数都是静态函数,这样能够直接根据给定的文件路径进行相应的操作。在对文件进行多个操作时最好用FileInfo,而只进行一个操作,最好用File。

1.构造对象

FileInfo需要先构造文件对象,再获取文件属性,或者对文件进行操作。它的构造方法不负责判断路径是否存在。

File不需要构造文件对象,直接传入文件的路径进行操作
2.判断文件是否存在

FileInfo对象可通过查看Exists属性查看文件是否存在

File可通过Exists方法查看文件是否存在
3.获取文件属性

注意,在用FileInfo和File类获取文件属性前最好先判断其是否存在

对FileInfo对象,在获取文件属性前应先用refresh函数刷新,可以访问文件的下列属性:

Attributes:archive, compressed, directory, hidden, offline, read-only, system, 和temporary的或值

CreationTime

CreationTimeUtc

LastAccessTime

LastAccessTimeUtc

LastWriteTime

LastWriteTimeUtc

Length:文件大小

IsReadOnly

File也可获取上述属性,不过是用静态函数获取

GetAttributes 

SetAttributes 

SetCreationTime 

SetCreationTimeUtc 

SetLastAccessTime 

SetLastAccessTimeUtc 

SetLastWriteTime 

SetLastWriteTimeUtc 

GetCreationTime 

GetCreationTimeUtc 

GetLastAccessTime 

GetLastAccessTimeUtc 

GetLastWriteTime 

GetLastWriteTimeUtc
4.路径操作

FileInfo提供了一些路径操作,这些操作只针对传入的路径字符串,和文件是否存在无关

FileInfo有下面一些属性

Name

Extension

FullName

Directory:返回DirectoryInfo对象

DirectoryName 

Parent

Root
5.新建,移动,删除文件

FileInfo和File类都提供了新建,移动,删除文件操作

FileInfo的方法:

CopyTo

Create

Delete

MoveTo

Replace
File的方法

Copy 

Create

Delete 

Move 

Replace
6.加密解密文件

FileInfo和File类都提供了Encrypt和Decrypt方法用来加密和解密文件,用某个用户加密的文件只有同一个用户能解密
四.监听文件夹

C#有个很有趣的类,FileSystemWatcher,这个类可以用来监听文件夹内文件的增加,删除,修改等事件。

1.定制监听的信息

通过设置FileSystemWatcher的一些属性来定制监听的信息

Path:监听的目录

NotifyFilter:用来设置对哪些类型的更改进行监视

监视的类型为FileName,DirectoryName,Attributes,Size,LastWrite,LastAccess,CreationTime,Security的或值。默认为LastWrite, FileName, DirectoryName的或值

InternalBufferSize:内部缓存区的大小,默认8KB,最小4KB,最大64KB

Filter:可以用通配符过滤文件,*匹配一个或多个字符,?匹配一个字符

IncludeSubdirectories:是否监听子目录
2.定制事件发生后的行为

文件夹里会发生下述事件

Changed

Created

Deleted

Renamed

我们通过给这些事件加事件处理器来处理事件

另外还可以用WaitForChanged来监听某个指定类型的消息然后返回
3.启动监听

只有当EnableRaisingEvents为true且Path有值时,才能监听成功,当我们将所有信息设置好后,就可以通过设置这个值启动和停止监听了
4.用BeginInit和EndInit来阻止component在初始化完成前使用,一般将一系列的操作写在这两个函数之间。
5.在Form中定义的时候必须将Form控件赋给SynchronizingObject属性
6.简单的示例:
监听"C:\jingle"文件夹下面所有文件和文件夹的重命名操作



[PermissionSet(SecurityAction.Demand, Name="FullTrust")]
public static void Run()
{
FileSystemWatcher watcher = new FileSystemWatcher();
watcher.Path = "c:\\jingle";
watcher.NotifyFilter = NotifyFilters.FileName | NotifyFilters.DirectoryName;
watcher.IncludeSubdirectories = true;
watcher.Filter = "*.*";

watcher.Renamed += new RenamedEventHandler(OnRenamed);

watcher.EnableRaisingEvents = true;

Console.Read();
}

private static void OnRenamed(object source, RenamedEventArgs e)
{
Console.WriteLine("File: {0} renamed to {1}", e.OldFullPath, e.FullPath);
}




 

作者:Jingle Guo

出处:http://www.cnblogs.com/studynote/

若标题中有“转载”字样,则本文版权归原作者所有。若无转载字样,本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: