下面的示例显示如何手动从文件读取字节,然后使用UTF8编码将它们转换为字符串:
示例:使用FileInfo类读取文件
//为指定路径创建FileInfo对象
FileInfo fi = new FileInfo(@"D:\DummyFile.txt");
//打开文件进行读\写
FileStream fs = fi.Open(FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite);
//创建与FileStream长度相同大小的字节数组byte[] fileBytes = new byte[fs.Length];
//定义计数器以检查要读取多少字节。读取每个字节时减少计数器int numBytesToRead = (int)fileBytes.Length;
//计数器指示已读取的字节数int numBytesRead = 0;
//迭代直到从FileStream中读取所有字节while (numBytesToRead > 0)
{
int n = fs.Read(fileBytes, numBytesRead, numBytesToRead);
if (n == 0)
break;
numBytesRead += n;
numBytesToRead -= n;
}
//从FileStream中读取所有字节后,即可使用UTF8编码将其转换为字符串string filestring = Encoding.UTF8.GetString(fileBytes);
如上面的代码所示,您必须编写许多代码才能从FileSream读取/写入字符串。而使用 StreamReader 和 StreamWriter 可以轻松完成相同的读/写操作。
下面的示例显示 StreamReader 如何使从文件中读取字符串变得容易:
示例:使用 StreamReader 读取文件
//为指定路径创建FileInfo对象
FileInfo fi = new FileInfo(@"D:\DummyFile.txt");
//打开文件进行读\写
FileStream fs = fi.Open(FileMode.OpenOrCreate, FileAccess.Read , FileShare.Read);
//通过传递需要对其进行操作的FileStream对象来创建StreamReader的对象
StreamReader sr = new StreamReader(fs);
//使用ReadToEnd方法从文件读取所有内容string fileContent = sr.ReadToEnd();
//操作后关闭StreamReader对象
sr.Close();
fs.Close();
注意,fi.Open() 它具有三个参数:
第一个参数是FileMode,用于创建和打开文件(如果文件不存在);
第二个参数 FileAccess 表示读取操作;
第三个参数是在打开文件时与其他用户共享文件以供阅读。
下面的示例显示 StreamWriter 如何使将字符串写入文件变得更容易:
示例:使用StreamWriter将文本写入文件
//为指定路径创建FileInfo对象
FileInfo fi = new FileInfo(@"D:\DummyFile.txt");
//打开文件进行读\写
FileStream fs = fi.Open(FileMode.OpenOrCreate, FileAccess.Write, FileShare.Read );
//创建StreamWriter对象以将字符串写入FileSream
StreamWriter sw = new StreamWriter(fs);
sw.WriteLine("Another line from streamwriter");
sw.Close();
不能同时对同一个 FileStream 对象执行读和写操作。如果您已经在读取文件,请创建一个单独的 FileStream 对象以写入同一文件,如下所示:
示例:StreamReader和StreamWriter
//为DummyFile.txt创建FileInfo对象
FileInfo fi = new FileInfo(@"D:\DummyFile.txt");
//打开DummyFile.txt进行读取操作
FileStream fsToRead = fi.Open(FileMode.OpenOrCreate, FileAccess.ReadWrite , FileShare.ReadWrite);
//打开DummyFile.txt进行写操作
FileStream fsToWrite = fi.Open(FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite);
//获取StreamReader
StreamReader sr = new StreamReader(fsToRead);
//使用StreamReader对象读取所有文本string fileContent = sr.ReadToEnd();
sr.Close();
//获取StreamWriter
StreamWriter sw = new StreamWriter(fsToWrite);
//用StreamWriter写一些文字
sw.WriteLine("Another line from streamwriter");
sw.Close();
//关闭所有Stream对象
fsToRead.Close();
fsToWrite.Close();