zoukankan      html  css  js  c++  java
  • .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 + @"FileDemo.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 + @"FileDemo.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的内容如下:

    本文源代码

  • 相关阅读:
    一行代码更改博客园皮肤
    fatal: refusing to merge unrelated histories
    使用 netcat 传输大文件
    linux 命令后台运行
    .net core 使用 Nlog 配置文件
    .net core 使用 Nlog 集成 exceptionless 配置文件
    Mysql不同字符串格式的连表查询
    Mongodb between 时间范围
    VS Code 使用 Debugger for Chrome 调试vue
    css权重说明
  • 原文地址:https://www.cnblogs.com/OpenCoder/p/10275045.html
Copyright © 2011-2022 走看看