(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。
|
请发表评论