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。