天天看点

Csharp进阶:文件流之Directory类和DirectoryInfo类,FileStream 类

Directory类和DirectoryInfo类

在程序开发中,不仅需要对文件进行操作,而且还需要对文件目录进行操作。例如创建目录,删除目录等,为此C#提供了Directory类和DirectoryInfo类。

******************************

Directory类是静态类,提供了许多静态方法用于对目录进行操作,例如创建、删除、查询和移动目录等。

静态方法,在指定目录创建所有目录和子目录

Directory.CreateDirectory(path);

******************************

DirectoryInfo类的功能与Directory类相似,不同的是DirectoryInfo是一个实例类,该类不仅拥有与Directory类功能相似的方法,而且还具有一些特有的属性。

实例方法,检索指定的父目录

DirectoryInfo di = Directory.GetParent(path);

FileStream 类

FileStream 类表示在磁盘或网络路径上指向文件的流,并提供了在文件中读写字节和字节数组的方法,通过这些方法,FileStream 对象可以读取诸如图像、声音、视频、文本文件等,也就是说FileStream类能够处理各种数据文件。

FileStream类有很多重载的构造方法,其中最常用的是带有三个参数的构造方法,具体如下。

FileStream(stringpath, FileMode mode, FileAccess access);

上述构造方法中,第一个参数path表示的是文件路径名,第二个参数mode表示如何打开或创建文件,第三个参数access用于确定 FileStream 对象访问文件的方式。

创建一个是否有此文件(没有则创建有则打开),并从中读取数据的实例文件流。

fsRead=new FileStream(sourcePath,FileMode.OpenOrCreate, FileAccess.Read);

创建一个是否有此文件(没有则创建有则打开)并向其中写入数据的实例文件流。

fsWrite= new FileStream(destPath, FileMode.OpenOrCreate, FileAccess.Write);

搭配使用使第一个文件的数据以字节为单位全部写入第二个文件

int temp = -1;

while ((temp = fsRead.ReadByte()) != -1)

{

fsWrite.WriteByte((byte)temp)

}

数据流通常与try-catch-catch-finally搭配寻找异常的实例

FileStream fsRead = null;

            FileStream fsWrite = null;

            try

            {

                fsRead = new FileStream(sourcePath, FileMode.OpenOrCreate, FileAccess.Read);

                fsWrite = new FileStream(destPath, FileMode.OpenOrCreate, FileAccess.Write);

                int temp = -1;

                while ((temp = fsRead.ReadByte()) != -1)

                {

                    fsWrite.WriteByte((byte)temp);

                }

            } 

            catch(IOException e)(IO异常)

            {

                Console.WriteLine(e.Message);

            }         

            catch(Exception e)(其他异常)

            {

                Console.WriteLine(e.Message);

            }

            finally

            {

                fsRead.Close();

                fsWrite.Close();

            }