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

出处 http://www.cnblogs.com/studynote/archive/2013/04/09/3009309.html

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);
    }

 

C#还提供了专门操作路径的Path类,用一些静态方法,能很方便的获取路径的文件名,后缀等信息,不赘述了,直接上ms的总结
ChangeExtension 更改路径字符串的扩展名。 
Combine(String[]) 将字符串数组组合成一个路径。 
Combine(String, String) 将两个字符串组合成一个路径。 
Combine(String, String, String) 将三个字符串组合成一个路径。 
Combine(String, String, String, String) 将四个字符串组合成一个路径。 
GetDirectoryName 返回指定路径字符串的目录信息。 
GetExtension 返回指定的路径字符串的扩展名。 
GetFileName 返回指定路径字符串的文件名和扩展名。 
GetFileNameWithoutExtension 返回不具有扩展名的指定路径字符串的文件名。 
GetFullPath 返回指定路径字符串的绝对路径。 
GetInvalidFileNameChars 获取包含不允许在文件名中使用的字符的数组。 
GetInvalidPathChars 获取包含不允许在路径名中使用的字符的数组。 
GetPathRoot 获取指定路径的根目录信息。 
GetRandomFileName 返回随机文件夹名或文件名。 
GetTempFileName 创建磁盘上唯一命名的零字节的临时文件并返回该文件的完整路径。 
GetTempPath 返回当前用户的临时文件夹的路径。 
HasExtension 确定路径是否包括文件扩展名。 
IsPathRooted 获取指示指定的路径字符串是否包含根的值。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值