.NET Core中向已存在文件的特定位置寫入數據


本例使用.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的內容如下:

 

 

本文源代碼

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM