• 【转】操作文件File类方法


    文件操作

    File.Copy(“source”, “targetFileName”, true);//文件拷贝,true表示当文件存在时“覆盖”,如果不加true,则文件存在报异常。
    File.Exists();//判断文件是否存在
    File.Move(“source”,“target”);//移动(剪切),思考如何为文件重命名?文件的剪切是可以跨磁盘的。
    File.Delete(“path”);//删除。如果文件不存在?不存在,不报错
    File.Create(“path”);//创建文件

    File.ReadAllLines(“path”,Encoding.Default);//读取所有行,返回string[]
    File.ReadAllText(“path”,Encoding.Default);//读取所有文本返回string
    File.ReadAllBytes(“path”);//读取文件,返回byte[],把文件作为二进制来处理。
    l===========================================
    File.WriteAllLines(“path”,new string[4] ,Encoding.Default);//将string数组按行写入文件。
    File.WriteAllText(“path”,“string”);//将字符串全部写入文件
    File.WriteAllBytes(“path”,newbyte[5]);//将byte[]全部写入到文件
    File.AppendAllText()//将string追加到文件

    文件流操作
    FileStream fs=File.Open(); //返回FileStream 
    FileStream fs=File.OpenRead();//返回只读的FileStream
    FileStream fs=File.OpenWrite();//返回只写的FileStream
    FileStream fs=new FileStream(参数);

    Stream(所有流的父类,是一个抽象类。)
    文件操作的类都在System.IO.*;

    拷贝文件的两种方式:将源文件内容全部读到内存中,再写到目标文件中;读取源文件的1KB内存,写到目标文件中,再读取源文件的1KB内存,再写到目标文件中……。第二种方式就是一种流的操作。
    l用File.ReadAllText、File.WriteAllText进行文件读写是一次性读、写,如果文件非常大会占内存、慢。需要读一行处理一行的机制,这就是流(Stream)。Stream会只读取要求的位置、长度的内容。
    Stream不会将所有内容一次性读取到内存中,有一个指针,指针指到哪里才能读、写到哪里。
    流有很多种类,文件流是其中一种。FileStream类newFileStream(“c:/a.txt”, filemode,fileaccess)后两个参数可选值及含义自己看。FileStream可读可写。可以使用File.OpenRead、 File.OpenWrite这两个简化调用方法。
    byte[]是任何数据的最根本表示形式,任何数据最终都是二进制。
    FileStream的Position属性为当前文件指针位置,每写一次就要移动一下Position以备下次写到后面的位置。Write用于向当前位置写入若干字节,Read用户读取若干字节。

    使用FileStream写入文本文件。
    通过FileStream写入读取文本文件。对于中文如果每次读取1个byte会有什么效果?更好的选择→StreamReader
    使用FileStream读取文本文件。
    使用FileStream进行大文件拷贝。
    File.ReadAllBytes()与File.WriteAllBytes()进行文件拷贝。(查看内存使用情况)
    使用using可以方便的释放资源(自动调用Dispose方法)
    只有实现了IDispose接口的类才能使用using释放资源 

    Stream把所有内容当成二进制来看待,如果是文本内容,则需要程序员来处理文本和二进制之间的转换。
    用StreamWriter可以简化文本类型的Stream的处理
    StreamWriter是辅助Stream进行处理的
     using (StreamWriter writer = new StreamWriter(stream, encoding))
     {
          writer.WriteLine("你好");
     }


    和StreamWriter类似, StreamReader简化了文本类型的流的读取。
     Stream stream = File.OpenRead("c:/1.txt");
       using (StreamReader reader = new StreamReader(stream,encoding))
                {
                    //Console.WriteLine(reader.ReadToEnd());
                    Console.WriteLine(reader.ReadLine());
                }
    ReadToEnd用于从当前位置一直读到最后,内容大的话会占内存;每次调用都往下走,不能无意中调用了两次
    ReadLine读取一行,如果到了末尾,则返回null。
    产生乱码的原因(只有文本文件才会乱码):文本文件存储时采用的编码,与读取时采用的编码不一致,就会造成乱码问题。解决:采用统一的编码就ok.
    文本文件编码,文本文件有不同的存储方式,将字符串以什么样的形式保存为二进制,这个就是编码,UTF-8、ASCII、Unicode等,如 果出现乱码一般就是编码的问题,文本文件相关的函数一般都有一个Encoding类型的参数,取得编码的方式:Encoding.Default、 Encoding.UTF8、Encoding.GetEncoding("GBK")
    文件编码(码表)
    •ASCII:英文码表,每个字符占1个字节。
    •GB2312:兼容ASCII,包含中文。每个英文占一个字节(正数),中文占两个字节(负数)
    •GBK:简体中文,兼容gb2312,包含更多汉字。英文占1个字节(正数),中文占两个(1个负数,1个可正可负)
    •Big5:繁体中文
    •Unicode:国际码表,中文英文都站2个字节。
    •UTF-8:国际码表,英文占1个字节,中文占3个字节。l输出Encoding.GetEncodings(),所有编码。
    什么是文本文件。拖到记事本中还能看得懂的就是文本文件,doc不是。
    File类的常用静态方法:(FileInfo*)
    •voidAppendAllText(string path, string contents),将文本contents附加到文件path中
    •bool Exists(string path)判断文件path是否存在
    •string[]ReadAllLines(string path) 读取文本文件到字符串数组中
    •stringReadAllText(string path) 读取文本文件到字符串中
    •voidWriteAllText(string path, string contents)将文本contents保存到文件path中,会覆盖旧内容。
    •WriteAllLines(string path,string[] contents),将字符串数组逐行保存到文件path中,会覆盖旧内容。

    正数对应的二进制取反 ,再加1就是负数的二进制。
    Encoding.Default

    System.Text.DBCSCodePageEncoding双字节字符集。如果输出EncodingName的话,结果为:简体中文(gb2312)

    Encoding.Default:与操作系统的当前“区域与语言选项”有关。

     

     

     

     ////如果系统中没有提供编码,则可以通过GetEncoding("编码的额字符串表示")获得该编码。

                //Encodingencoding=Encoding.GetEncoding("gb2312");

     

                StringBuildersb =newStringBuilder();

                EncodingInfo[]infos = System.Text.Encoding.GetEncodings();

                for(inti = 0; i < infos.Length; i++)

                {

                    sb.Append(infos[i].CodePage +"   "+ infos[i].DisplayName +"   "+ infos[i].Name +" ");

                }

     

                File.WriteAllText("encodings.txt",sb.ToString());

     

    原文:

    http://blog.csdn.net/n1g2q2012/article/details/9380911

    类似参考:

    http://www.cnblogs.com/zysbk/archive/2012/08/09/2629589.html (推荐,图文版)

     

     

     

  • 相关阅读:
    工欲性能调优,必先利其器(2)- 火焰图
    工欲性能调优,必先利其器(1)
    关于烂代码的那些事(上)
    HTTP 返回码中 301 与 302 的区别
    HTTP 状态码 301 和 302 详解及区别——辛酸的探索之路
    HTTP 状态码之:301、302 重定向
    记一次获得 3 倍性能的 go 程序优化实践,及 on-cpu / off-cpu 火焰图的使用
    Coloring Flame Graphs: Code Hues
    StackOverflow 创始人关于如何高效编程的清单
    Spring Bean的生命周期(非常详细)
  • 原文地址:https://www.cnblogs.com/zqt14520/p/5614798.html
Copyright © 2020-2023  润新知