zoukankan      html  css  js  c++  java
  • C#对文件/目录的操作:Path、File、Directory、FileStream、StreamReader、StreamWriter等类的浅析

    以下类的命名空间都是:System.I/0;

    一、Path:主要对文件路径的操作!

      常用方法:

           String path=@"C:ac123.txt";

    1-1、Path.GetFileName(path);  //获得文件名:123.txt

    1-2、Path.GetExtenSion(path);  //获得后缀名:.txt

    1-3、Path.GetFileNameWithoutExtension(path);  //获得无后缀文件名:123

    1-4、Path.GetDirectoryName(path);  //获得当前文件的路径:C:ac

    1-5、Path.ChangeExtenSion(path,".exe");  //对pat字符串修改后缀,即输出:C:ac123.exe 

    1-6、Path.Combine(s1,s2);  //路径的合并:s1=@"c:12"或@ s1="c:12" ,s2=@"abc.txt"  结果都是:"c:12abc.txt"

    1-7、Path.GetFullpath(o.txt) ; // o.txt文件在bin目录下  //获得相对路径的绝对路径:c:......inDebugo.txt

    1-8、Path.ReadAllText(path);  //获得文件(即:123.txt)的内容

    1-9、PathGetTempPath()  //获得当前用户的临时文件路径

    1-10、Path.GetTempFileName()  //获得一个唯一一个临时文件名(*)

    1-11、Path.GetRandomFileName()  //反回一个String 的随机文件名

    二、File:主要用于文件及其内容的操作

    1-1、File.Exists(@"c:12abc.txt") ;  // 返回 bool ;判断路径:c:12.abc.tex 是否存在

    1-2、File.Create(@"c:12abc.txt");  //在 c:12创建abc.txt文件。注: 如果存在该文件名则或覆盖

    1-3、File.Move(@"c:12abc.txt",@"c:1abc.txt")  //abc.txt 从c:12 移动到c:1下

    1-4、File.Copy(@"c:12abc.txt","123.txt",true);      //在当前文件abc.txt,拷贝成123.txt True表示:如果文件存在时“覆盖”,不加则报错!

    1-5、File.Delete(@"c:12abc.txt");      //删除abc.txt,如果文件不存在不会报错

    读/写文件内容方法:

    1-6、Flie.ReadAllText(@"c:12abc.txt",Encoding.UTF-8);  //以utf-8编码 读取c:12目录下的 abc.txt 文件的内容 返回:string 字符串

    1-7、Flie.ReadAllLines(@"c:12abc.txt",Encoding.UTF-8);  //以utf-8编码 按行读取c:12目录下的 abc.txt 文件的内容 返回:string[] 字符串数组

    1-8、Flie.ReadAllBytes(@"c:12abc.txt",Encoding.UTF-8);  ///以utf-8编码读取c:12目录下的 abc.txt 文件的内容 返回:bytes[] 数组   

    1-9、Flie.WriteAllBytes(@"c:12abc.txt",bytes);  //bytes是Byte[]数组  //将 bytes 写入c:12目录下的 abc.txt 文件的内容 会覆盖

    1-10、Flie.WriteAllLines(@"c:12abc.txt",strings);  //strings是strings[]数组,将strings按行写入c:12目录下的 abc.txt 文件的内容 会覆盖

    1-11、Flie.WriteAllText(@"c:12abc.txt",string);  //string是字符串,将string写入c:12目录下的 abc.txt 文件的内容 返回:string 字符串  会覆盖! 补充: File.AppandAllText(@"c:12abc.txt",string)追加方法

    补充:字符串、bytes[]数组互转 方法:以UTF-8为例  要统一编码,否则会出现乱码

    Encoding.UTF-8.getBytes(string),

    Encoding.UTF-8.getString(bytes[] bytes)

    三、FileStream 类:操作字节的 即可以操作所有文件

    读取文件:

    ———————————读取star—————

    1、创建一个FileStream 对象

    //FileMode是枚举类型;Appand,Create,CreateNew,Open,OpenOrCreate,Truncate

    //FileAccess是枚举类型;Read,ReadWrite,Write

    FileStream FSRead= new FileStream(@"c:123abc.txt",FileMode.OpenOrCreate,FileAccess.Read);  

    byte[] buffer= new byte[1024*1024*5]; //5M数组 

    //.Read(byte[] buffer,int starIndex, int count)//Read方法参数  返回 int ,即读取到的实际有效的字节数

    int i = FSRead.Read( buffer,0, buffer.Length);

    //将数组转码成字符串

    string str= encoding.UTF-8.GetString(buffer,0,r);//0:即从第0个自己开始转码,r:转码个数

    //关闭 &释放 FSRead 文件流占用的资源

    FSRead.Close();

    FSRead.Dispose()

    ———————————读取end—————

    ———————————写入star—————

    FileStream 写入:using(会自动释放资源)

    using(FileStream FSWrite= new FileStream(@"c:123abc.txt",FileMode.OpenOrCreate,FileAccess.Wirte))

    {

      string str = "123456789";

      byte [] buffer= Encoding.UTF-8.GetByte(str);

      FSWrite.Write(buffer,0,bufffer.Length)

    }

    ———————————写入end—————

    四、StreamReader 、StreamWriter 操作字符,即针对文本操作

    1、创建StreamReader 读取实例

      using(StreamReader smReader= new StreamReader(@"c:ac.123.txt",Encoding.Default))

      {

        //!非  , 是否当读到文件里面的最后一行   循环打印出文本文件的内容到窗口

        while(!smReader.EndOfStream)

        {

          //读取一行,返回string 字符串

           Console.WriteLine( smWrite.ReadLine() );

        }

      }

    2、创建StreamWriter 写入实例

      //True 表示追加写入。

      using(StreamWriter smWriter= new StreamWriter(@"c:ac.123.txt",True))

      {

          //c:ac.123.txt 内容追加“123456”

         smWrite.Write("123456") ;

      }

    五、 Directory and DirectoryInfo 操作目录类
             DirectoryInfo dic = new DirectoryInfo( "c:\abc" );
                //dic.Name; //获取文件名
                //dic.FullName; //获取文件全路径  功能要比Directory强大 区别在于它是实例类 而后者是静态类
                Directory .CreateDirectory("c:\abc" ); //创建文件夹
                Directory .CreateDirectory("c:\abc\1\2\3\4\5\6\7" ); //连续创建多级文件夹
                if (Directory .Exists( "c:\abc")) //判断是否存在文件夹
                {
                    Directory .Delete("c:\abc" ); //如果存在则删除 如果文件夹为空能正常删除 不为空则会报错 "目录不是空的"
                    Directory .Delete("c:\abc" , true); //true则指定 如果文件夹不为空 同样执行删除操作
                }
                string [] paths = Directory .GetDirectories( "c:\abc"); //获取目录中所有子目录名称 注意只取下一级别 即c:abc1 如获取windows文件夹下所有文件夹路径可以使用此方法
                string [] paths2 = Directory .GetDirectories( "c:\windows", "$*" );//以上方法重载实现  检索以$开头的文件
                string [] paths3 = Directory .GetDirectories( "c:\abc", "*" , SearchOption .AllDirectories);//通配符查找文件夹中符合条件的文件 包括子级文件夹
                foreach (string path in paths)

         {
                    Console .WriteLine(path);
                }
                string [] files = Directory .GetFiles( "c:\windows"); //遍历文件夹下的所有文件
                string [] files2 = Directory .GetFiles( "c:\windows", "*.ini" , SearchOption .AllDirectories);//通配符查找目录下的文件 用法类似于GetDirectories
                foreach (string file in files2)

         {
                    Console .WriteLine(file);
                }
                //目录操作最重要的就是 GetFiles和GetDirectories方法
                Directory .GetParent("c:\abc\1\2\3\4\5\6\7" ); //返回7文件夹的父级目录 c:abc123456
                Console .Read();

      本次分享到此结束,有错误之处请回复指正!

  • 相关阅读:
    冲刺五
    ubuntu安装utorrent
    struts2中properties属性
    Hadoop下的word count程序
    导入svn项目时eclipse崩溃
    Struts2 中jsp直接跳转到action
    用eclipse开发hadoop程序
    ubuntu下安装java
    【橙色警报】最新盗qq号方式,连我这个老鸟都一不小心被骗了
    在ubuntu上安装hadoop(书和官方文档结合的)
  • 原文地址:https://www.cnblogs.com/jicheng/p/5953844.html
Copyright © 2011-2022 走看看