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的内容如下:

    本文源代码

  • 相关阅读:
    easyui改变tab标题
    java获取request中的参数、java解析URL问号后的参数
    java生成word文档
    jquery即时获取上传文件input file文件名
    微信公众号开发(三)
    Linux中文乱码 更改Linux字符集
    微信公众号开发(五)
    NSCache
    MIT神技术绘制用户界面至任意物体
    导弹工厂到摩托车间:制造业如何应用大数据
  • 原文地址:https://www.cnblogs.com/OpenCoder/p/10275045.html
Copyright © 2011-2022 走看看