在C#中读取文件内容,有两个类可以做到,一个是StreamReader类,一个是FileStream类。那么究竟如何实现?以及他们两个有什么区别?在今后应用中应该使用哪一个?别着急,我一个个来说!
目录
1.开门见山谈区别
FileStream类提供了在文件中读写字节的方法,但经常使用StreamReader或 StreamWriter执行这些功能。这是因为FileStream类操作的是字节和字节数组,而StreamReader类操作的是字符数据。因此FileStream类既可以对文本文件进行读写也可以对多媒体文件进行读写,多用于对大文件进行读写,且它对文件可进行分步读写,减小内存压力。而StreamReader和StreamWriter类多用于对小文件读写。
FileStream操作字节,更适合大文件。
StreamReader操作字符,更适合小文件。
2.FileStream
用FileStream操作文件的方法代码如下:
using System;
using System.IO;
using System.Text;
class Test
{
public static void Main()
{
string path = @"c:\temp\MyTest.txt";
//如果文件存在就删除
if (File.Exists(path))
{
File.Delete(path);
}
//创建新文件
using (FileStream fs = File.Create(path))
{
AddText(fs, "This is some text");
AddText(fs, "This is some more text,");
AddText(fs, "\r\nand this is on a new line");
AddText(fs, "\r\n\r\nThe following is a subset of characters:\r\n");
for (int i=1;i < 120;i++)
{
AddText(fs, Convert.ToChar(i).ToString());
}
}
//读取文件内容
using (FileStream fs = File.OpenRead(path))
{
byte[] b = new byte[1024];
UTF8Encoding temp = new UTF8Encoding(true);
while (fs.Read(b,0,b.Length) > 0)
{
Console.WriteLine(temp.GetString(b));
}
}
}
//添加文本内容的方法
private static void AddText(FileStream fs, string value)
{
byte[] info = new UTF8Encoding(true).GetBytes(value);
fs.Write(info, 0, info.Length);
}
}
3.StreamReader
用StreamReader操作文件的方法代码如下:
using System;
using System.IO;
class Test
{
public static void Main()
{
try
{
// 读取文本文件
using (StreamReader sr = new StreamReader("TestFile.txt"))
{
string line;
// ReadLine()一行一行的循环读取
//当然可以直接ReadToEnd()读到最后
while ((line = sr.ReadLine()) != null)
{
Console.WriteLine(line);
}
}
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
}
4.注意事项
4.1.及时释放
这两种类型使用完毕后都需要对其进行释放!具体说明看下图:
4.2.异步操作
如果读取的文件内容过大,时间过长,导致界面卡死,那么可以采用两个办法:
①开线程
②利用异步
具体请看文末参考文献。
4.3汉字乱码
编码:gb2312可以保证汉字不出现乱码:
请看我的使用:
(StreamReader)
(FileStream)
5.总结:
我们正常操作文件的时候,比如office文件或者txt文本文件,那么使用相对简便的StreamReader就足够了。如果读取音视频文件,那么就要考虑FileStream了!
6.参考文献:
FileStream 类 (System.IO) | Microsoft Docs