本例使用.NET Core向一个文本文件中的特定位置写入数据,来模拟文件上传中的断点续传是如何在服务器端实现的。

新建一个.NET Core控制台项目FileContinueToWrite,其Program.cs的源代码如下:

using System;
using System.Text;
using System.IO; namespace FileContinueToWrite
{
class Program
{
/// <summary>
/// GenerateFile方法用于生成文本文件Demo.txt,写入初始字符串"123456789"
/// </summary>
static void GenerateFile()
{
var filePath = AppDomain.CurrentDomain.BaseDirectory + @"File\Demo.txt"; //如果文本文件Demo.txt已经存在,则将其删除
if (File.Exists(filePath))
{
File.Delete(filePath);
} //创建文本文件Demo.txt,并写入初始字符串"123456789"
using (var fileStream = new FileStream(filePath, FileMode.CreateNew))
{
string content = "";//向文本文件Demo.txt中写入的内容为"123456789"
byte[] data = Encoding.ASCII.GetBytes(content);//使用ASCII码将字符串转换为字节数据,所以一个字符占用一个字节 fileStream.Write(data, , data.Length);
}
} /// <summary>
/// AppendCharsAfter5方法打开文本文件Demo.txt,从文件流第5个字节后开始写入字符串"ABC"
/// </summary>
static void AppendCharsAfter5()
{
var filePath = AppDomain.CurrentDomain.BaseDirectory + @"File\Demo.txt"; //由于我们是在已经存在的文本文件Demo.txt中写入数据,并且要从文件流第5个字节后开始写入,所以下面要设置FileStream为FileMode.Open和FileAccess.ReadWrite,这样才能从文本文件Demo.txt中第5个字节后开始写入数据
using (var fileStream = new FileStream(filePath, FileMode.Open, FileAccess.ReadWrite))
{
string content = "ABC";//向文本文件Demo.txt中写入的内容为"ABC"
byte[] data = Encoding.ASCII.GetBytes(content);//使用ASCII码将字符串转换为字节数据,所以一个字符占用一个字节 fileStream.Position = ;//设置FileStream的Position为5,从文本文件Demo.txt中第5个字节后开始写入新的字符串"ABC"。由于执行完GenerateFile方法后,文本文件Demo.txt的内容为"123456789",所以第5个字节也就是"5"这个字符,所以将"ABC"写入第5个字节后,相当于是在"12345"后写入"ABC",原本的"678"会被覆盖为"ABC"
fileStream.Write(data, , data.Length);//所以这里写入字符串"ABC"到文本文件Demo.txt后,Demo.txt的内容为"12345ABC9"
}
} static void Main(string[] args)
{
GenerateFile(); Console.WriteLine("Press any key to run AppendCharsAfter5()...");
Console.ReadKey(); AppendCharsAfter5(); Console.WriteLine("Press any key to end...");
Console.ReadKey();
}
}
}

上面的代码会先运行GenerateFile方法生成一个文本文件Demo.txt,并写入初始字符串"123456789",然后运行AppendCharsAfter5方法,向文本文件Demo.txt中的第5个字节后写入字符串"ABC"。

GenerateFile方法运行后,文本文件Demo.txt的内容如下:

.NET Core中向已存在文件的特定位置写入数据-LMLPHP

AppendCharsAfter5方法运行后,文本文件Demo.txt的内容如下:

.NET Core中向已存在文件的特定位置写入数据-LMLPHP

本文源代码

04-21 01:30
查看更多