首页 > 代码库 > System.IO 命名空间

System.IO 命名空间

System.IO 命名空间

 

System.IO 命名空间的主要目的是为了提供方便访问操作系统的文件和目录类型,另外,也提供写内存和网络流的方法。

这个命名空间提供主要两种方法处理文件和目录,能够使用FileInfo 和 DirectoryInfo 对象获得或修改文件和目录的信息;也能够用File 和 Directory 类实现相同的功能,但是两者都要求传入的文件名为静态成员。通常,如果想要获得文件系统对象的某一项信息,用 File 和 Directory 类;如果想要获得一个文件系统对象的多项信息,用 FileInfo 和 DirectoryInfo 类。两者也是互补的。例如,可以先用 Directory 类型获得目录中所有文件的信息,再用 FileInfo 对象获得文件的名字和其他信息。看下面的例子是如何做的:

 

open System.IO

 

// list all the files in the root of C:drive

let files =Directory.GetFiles(@"c:\")

 

// write out various information about thefile

for filepath in files do

let file = new FileInfo(filepath)

printfn "%s\t%d\t%O"

file.Name

file.Length

file.CreationTime

 

运行结果如下(不同的机器会有不同的结果):

 

addadmin.bat     95     ? 01/10/2003 02:08:10

ATTDialer.doc           297472   03/11/2003 20:12:54

AUTOEXEC.BAT    0       12/05/2003 20:21:21

avapower.gif      1056    07/07/2004 01:27:05

boot.ini          211           12/05/2003 12:58:01

CONFIG.SYS       0      12/05/2003 20:21:21

dpst.bat            17       01/10/2003 02:08:10

imagefaq.bat       21      01/10/2003 02:08:10

IO.SYS             0        12/05/2003 20:21:22

MSDOS.SYS       0        12/05/2003 20:21:22

NTDETECT.COM   47564   23/08/2001 14:00:00

Ntldr               250032   23/08/2001 14:00:00

 

这个命名空间还能非常方便地处理文件内容。F# 中的文件以流的形式打开和表示文件,因此,读写文件的方法可以是字节、字符或字符串。打开文件并从中读出文本,不可能更简单了,只要调用 File. ReadAllLines 方法,就返回一个数组,其中包含了文件中的所有行。下面的例子演示了如何读取以逗号分隔的文件文件,有三列数据:

 

open System.IO

//test.csv:

//Apples,12,25

//Oranges,12,25

//Bananas,12,25

 

// open a test file and print the contents

let readFile() =

let lines =File.ReadAllLines("test.csv")

let printLine (line: string) =

let items = line.Split([|‘,‘|])

printfn "%O %O %O"

items.[0]

items.[1]

items.[2]

Seq.iter printLine lines

 

do readFile()

 

执行前面的代码,处理注释中的文本文件,结果如下:

 

Apples 12 25

Oranges 12 25

Bananas 12 25

 

注意

File. ReadAllLines 方法假设文件是以UTF-8 编码的,如果文件没有使用这个文本编码,应该用方法的另一个重载,传入适当的编码对象。例如,如果文件使用的是西欧语言的 Windows-1252 编码,打开的方法应该是:

File.ReadAllLines("accents.txt"),Encoding.GetEncoding(1252))。