• C# 文件流的使用


    (2012-07-27 19:42:23)

    1.C#文件流使用前要加上using System.IO;
    2.在Unity3D中,调试阶段的写入文件的默认路径是项目文件夹下。
                 发布后的写入文件默认路径是exe文件的同级目录。
    无论是调试还是发布(尤其是发布)时,一定要注意把该读取的文件放在特定目录,否则出错。
    3.对于手动写好的一些txt文件,无论是作为之后读取还是写入用途(尤其是要经常进行附加写入用途),都要先安排好最后一行的转行符,防止出错。
     
    TextWriter 是 StreamWriter 和 StringWriter 的抽象基类,它们将字符分别写入流和字符串。创建一个 TextWriter 实例,将对象写入字符串,或将字符串写入文件,或序列化 XML。
    1.测试文件是否存在:(在读取文件前使用,从而既可以避免失败读取,也可以依此输出错误,便于调试排错)
          if(File.Exists("bg.txt"))   //默认路径应该和读取,写入的默认路径相同
    2.读取文件范例:
            using (TextReader reader = new StreamReader("bg.txt"))
            {
                t = 0;        string mapstr = string.Empty;
                while (reader.Peek() != -1 && t < 20)  //当为-1时已经到文件尾
                {
                    mapstr = reader.ReadLine().ToString();
                    setmap(mapstr, t);
                    t++;
                }
                reader.Close();   
            }
    ①读取不存在的文件时,会出错,包括using以内以及using以后的代码不会被执行。
    ②当读取已存在的空文件时reader.Peek()第一次执行不会出错且返回-1。
    ③统计行数时,读完最后一行带字符的字符串后,无论此行有没有带转行符,reader.Peek()函数都是返回-1的,不必担心出问题。(注意,若“最后一行”包括转行符,且转行符之后还有空格键或Tab这类不可见字符,函数不会返回-1,程序会继续读数据)
    ④reader.ReadLine().ToString();返回的字符串不含有转行符(和WriteLine不同),因此将返回字符串写回给另一个文本文件时,Write方式不含转行符,WriteLine方式最后结果仅含一个转行符。
     
    ④猜测:TextReader reader = new TextReader("bg.txt")不可用由于TextReader是抽象类,
    StreamReader reader = new StreamReader("bg.txt"))不用是由于需要禁止使用TextReader以外StreamReader扩展的功能。
     
    3.保存文本范例:
            using (TextWriter writer = new StreamWriter("bg.txt"))
            {    //非默认路径貌似要加@,如@"c:\temp\MyTest.txt";",不知道有什么用
                writer.WriteLine("Hello World");   //写一行字符串并伴随结束符
                writer.Close();   
            }
    注意无论是writer.WriteLine()还是writer.Write(),都是覆盖式写入,会清洗原位置文本全部内容再写。
     
    4.追加文本范例:(使用File.AppendText前不需去打开文件,此步骤包含打开文件)
            using (StreamWriter w = File.AppendText("log.txt"))
            {   
                w.WriteLine("ggg"); //此时的Write和WriteLine函数自动会把写入的字符串放在最后
                // Close the writer and underlying file.
                w.Close();
            }
    ①不会清洗原文本内容,可以实现文本末尾追加内容。
    ②追加文本方式和正常写入文本方式一样,当文本不存在时会自动新建文本。
    ②猜测File类中或许有类似File.AppendText()这种函数,可以返回非全覆盖式写入的StreamWriter。

  • 相关阅读:
    在Linux中安装Oracle(较详细图解)
    SecureCRT
    MHA配置文件说明
    MySQL建表规范与常见问题 (go)
    Shell编程时常用的系统文件(转)
    Leetcode: Excel Sheet Column Title
    Leetcode: Find Peak Element
    Leetcode: Intersection of Two Linked Lists
    Leetcode: Majority Element
    Summary: Class Variable vs. Instance Variable && Class Method
  • 原文地址:https://www.cnblogs.com/mzdbskipop/p/3137722.html
Copyright © 2020-2023  润新知