zoukankan      html  css  js  c++  java
  • .NET中的IO操作基础介绍

    关于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

  • 相关阅读:
    CSS为英文和中文字体分别设置不同的字体
    进程控制之孤儿进程
    求解逻辑问题:谁养鱼
    2019-7-29-win10-uwp-如何使用DataTemplate
    2019-7-29-win10-uwp-如何使用DataTemplate
    2018-8-10-win10-uwp-修改Pivot-Header-颜色
    2018-8-10-win10-uwp-修改Pivot-Header-颜色
    2018-10-17-Sublime-Text-好用的插件
    2018-10-17-Sublime-Text-好用的插件
    2018-11-13-WPF-禁用实时触摸
  • 原文地址:https://www.cnblogs.com/xiaoyaodijun/p/4350854.html
Copyright © 2011-2022 走看看