文件输入输出
(1)Directory(Info)和File(Info)类型
Directory和File通过静态成员实现操作,扩展了System.Object。返回强类型对象。
DirectoryInfo和FileInfo通过实例级方法实现(必须使用new关键字分配它们),从FileSystemInfo抽象类派生。返回简单的字符串值。
使用DirectoryInfo类型:操作目录和子目录成员
访问当前应用程序目录可以使用”.”符号:DirectoryInfo dir1=new DirectoryInfo(“.”);
使用DirectoryInfo类型枚举出文件
GetFiles()方法返回FileInfo类型的数组
DirectoryInfo dir1=new DirectoryInfo(@“C:\Windows”); //先生成目录
FileInfo[]images=dir1.GetFiles(“*.jpg”,SearchOption.AllDirectories);//在目录中查找
使用DirectoryInfo类型创建子目录
DirectoryInfo.CreateSubdirectory创建子目录,返回的是DirectoryInfo类型
dir1.CreateSubdirectory(“MyFolder”);
DirectoryInfodir2=dir1.CreateSubdirectory(“MyFolder2”);
使用Directory类型:返回的是字符串数据类型
string[]dirves=Directory.GetLogicalDrives();
FileInfo类
FileInfo.方法():Create(),Open(),OpenRead(),OpenWrite(),返回的是FileStream对象,在使用FileStream对象后要确保关闭句柄来释放非托管资源,由于FileStream实现了IDisposable,可以使用using域来让编译器生成释放逻辑,using自动调用Dispose().
FileInfo f=new FileInfo(@”C:\Test.dat”);
using(FileStream fs=f.方法(….)){….}
FileInfo.OpenText()返回StreamReader类型的实例。
FileInfo.CreateText(), FileInfo.AppendText()返回StreamWriter对象。
FileStram:只能读取或写入一个字节或字节数组
FileStream只能处理原始字节,通过System.Text命名空间的Encoding类型实现在字符串和字节数组之间的编码/解码操作,编码完后使用FileStream.Write()方法把字节数组保存到文件内。如果要把字节读回内存,需要通过Position属性重置流内部的位置,然后调用ReadByte()方法。
using(FileStreamfStream=File.Open(@”C:\test.dat”,fileMode.Create)){
string msg=”hello”;
byte[]msgAsByteArray=Encoding.Default.GetBytes(msg);//把字符串编码成字节数组
fStream.Write(msgAsByteArray,0,msgAsByteArray.Length); //把byte[]写入文件
fStream.Position=0; //重置流内部的位置
//从文件读取字节并显示在控制台上
byte[] bytesFromFile=newbyte[msgAsByteArray.Length];
for(inti=0;i< msgAsByteArray.Length;i++)
bytesFromFile[i]=(byte)fStream.ReadByte(); //从文件读取字节,显示的是字节编码
Encoding.Default.GetString(bytesFromFile); //解码后的字符串,为hello
}
StreamWriter,StreamReader写文本文件
using (StreamWriter sw = File.CreateText("test.txt")){
sw.WriteLine("123");
sw.Write(sw.NewLine); //插入一个新行
}
读文本文件
using (StreamReader sw = File.OpenText("test.txt")){
string s=null;
s=sw.ReadLine();
}
直接创建StreamWriter/StreamReader类型
using (StreamWriter/StreamReadersw =new StreamWriter/StreamReader ("test.txt"){}