关于IO简介 .NET中的IO操作,经常需要调用一下几个类。 clipboard[6] 1.FileStream类 文件流类,负责大文件的拷贝,读写。 2.Path类 Path类中方法,基本都是对字符串(文件名)的操作,与实际文件没多大关系。 3.File类 File类可以进行一些对小文件拷贝、剪切操作,还能读一些文档文件。 4.Dirctory 目录操作,创建文件、删除目录,获取目录下文件名等等。 Path类 1.ChangeExtension(path,".jpg") 改变文件后缀名! 2.Combine(s1,s2) 将两个路径连起来 3.获取文件名的几个方法 1)Path.GetFileName(s1); //获取路径中的文件名 2)Path.GetFileNameWithoutExtension(s1); //获取文件名,不包括后缀名! 3)Path.GetDirectoryName(s1)//获取路径中的目录不包括文件名。 4)Path.GetExtension(s1); //只获取扩展名 4.GetFullPath("") 获取完整路径,根据相对路径获得绝对路径。 5.临时目录 1)GetTempPath() //获取当前用户的临时目录 2)GetTempFileName() //获取一个随机的文件名,并在临时目录下创建这个文件。 3)GetRandomFileName() //仅获取一个随机文件名。 Directory类 1.创建目录 Directory.CreateDirectory(@"目录"); 2.判断某个目录是否存在某文件 string path =@"路径"; if(Directory.Exists(path)) { } 3.删除目录 1)Directory.Delete(path); //删除空目录 ,目录下没有文件了。 2)Directory.Delete(path,true); //不管空不空,都删! 3)如果没有目录就会报异常,最好用if(Directory.Exists(path))判断一下。 4.移动文件目录 重命名目录也用这个来做。 Directory.Move(@"c:\a",@"c:\abc"); 5.DirectoryInfo 可以把文件夹当作对象来使用 DirectoryInfo dirInfo = new DirectoryInfo(@"path"); 6.获取当前目录下的所有直接子目录 和 直接子文件 //获取目录下的直接子目录 String[] dirs =Direcotory.GetDirectories(@"目录"); //获取目录下的直接子文件 String[] files =Directory.GetFiles(@"目录"); 7.获取当前目录下的目录和文件 另一种方式 //获取目录下的直接子目录 //String[] dirs =Direcotory.GetDirectories(@"目录"); //获取目录下的直接子文件 //String[] files =Directory.GetFiles(@"目录"); //—————————以上是6中的做法,他有一定性能上的问题。什么问题呢?————————————— 使用String[] dirs =Direcotory.GetDirectories(@"目录");是必须要等获取了整个string之后,才能遍历这个集合。 如果希望,读到一条处理一条。 建议使用Directory.EnumerateFile() 1)EnumerateFile返回的是一个实现了IEnumerable接口的集合。实际上使用了迭代器模式。 2)SearchOption.ALLDirctories参数,会让.EnumerateFile()遍历所有子目录下的文件。 File类 1.拷贝 File.Copy("Source"," Target",true); 2.判断是否存在 File.Exists(@"Source") ; 3.剪切 File.Move("Source","Targe"); 4.创建 File.Create("path"); 5.删除 File.Delete("path"); //删除,若没有,不报错! 6.读操作 1)File.ReadAllLines("path",Encoding.Default); //返回一个string[] 2)File.ReadAllTest("path",Encoding.Default); //string 3)File.ReadAllBytes("path"); 7.写操作 1)File.WriteAllLines("path",new string[4],Encoding.Default);//按行写入一个文件中。 2)File.WriteAllText("path","string"); 3)File.WriteAllBytes("path",new byte[4]); 4)File.AppendAllText(); //将string追加到文件中。 8.返回FileStream的快捷方式 1)File.Open(string,FileMode); //返回一个FileStream 2)File.OpenRead(string,FileMode); //返回一个只读的 FileStream 3)File.OpenWrite(string,FileMode); //返回一个只写的 FileStream
二:文件流与内存流的转换
1.字符串=>比特数组
(1)byte[] bt=System.Text.Encoding.Default.GetBytes("字符串");
(2)byte[] bt=Convert.FromBase64String("字符串");
补充:
System.Text.Encoding.Unicode.GetBytes(str);
System.Text.Encoding.UTF8.GetBytes(str);
System.Text.Encoding.GetEncoding("gb2312").GetBytes(str); //指定编码方式
string str = "中国?ss123?";
byte[] bytes = System.Text.Encoding.Default.GetBytes(str); //gb2312编码汉字占2个字节、英文字母占1个字节 bytes长度为12
string s = System.Text.Encoding.Default.GetString(new byte[] { bytes[0],bytes[1] });//解码后为“中”
byte[] bytes = {97, 98, 99, 100, 101, 102};
string str = System.Text.Encoding.ASCII.GetString(bytes); //结果为:abcdef ASCII码表
常用方法:
GetString 已重载。 在派生类中重写时,将一个字节序列解码为一个字符串。
GetChars 已重载。 在派生类中重写时,将一个字节序列解码为一组字符。
GetBytes 已重载。 在派生类中重写时,将一组字符编码为一个字节序列。
GetByteCount 已重载。 在派生类中重写时,计算对一组字符进行编码所产生的字节数。
GetCharCount 已重载。 在派生类中被重写时,计算对字节序列进行解码所产生的字符数。
GetDecoder 在派生类中重写时,获取一个解码器,该解码器将已编码的字节序列转换为字符序列。
GetEncoder 在派生类中重写时,获取一个解码器,该解码器将Unicode字符序列转换为已编码的字节序列
2.比特数组 => 字符串
(1)string str=System.Text.Encoding.Default.GetString(bt);
(2)string str=Convert.ToBase64String(bt);
3.字符串 => 流
(1)MemoryStream ms=new MemoryStream(System.Text.Encoding.Default.GetBytes("字符串"));
(2)MemoryStream ms=new MemoryStream(Convert.FromBase64String("字符串"));
4.流 => 字符串
(1)string str=Convert.ToBase64String(ms.ToArray());
(2)string str=System.Text.Encoding.Default.GetString(ms.ToArray());
5.比特数组 => 流
(1)MemoryStream ms=new MemoryStream(bt);
(2)MemoryStream ms=new MemoryStream();ms.Read(bt,0,bt.Lenght);
6.流 => 比特数组
(1)byte[] bt=ms.ToArray();
(2)MemoryStream ms=new MemoryStream();
ms.Write(bt,0,ms.Length);
来源:http://www.cnblogs.com/mcad/p/4203550.html