本例使用.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 = "123456789";//向文本文件Demo.txt中寫入的內容為"123456789" byte[] data = Encoding.ASCII.GetBytes(content);//使用ASCII碼將字符串轉換為字節數據,所以一個字符占用一個字節 fileStream.Write(data, 0, 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 = 5;//設置FileStream的Position為5,從文本文件Demo.txt中第5個字節后開始寫入新的字符串"ABC"。由於執行完GenerateFile方法后,文本文件Demo.txt的內容為"123456789",所以第5個字節也就是"5"這個字符,所以將"ABC"寫入第5個字節后,相當於是在"12345"后寫入"ABC",原本的"678"會被覆蓋為"ABC" fileStream.Write(data, 0, 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的內容如下:
AppendCharsAfter5方法運行后,文本文件Demo.txt的內容如下: