C# Stream.Seek – 在流中定位

Stream.Seek 方法用于在流中寻找具有给定偏移量的位置,并将流的读/写指针移动到该位置。Seek 方法可用于在文件中进行定位,以便读取或写入指定位置的数据。

使用方法

方法签名

public virtual long Seek(long offset, SeekOrigin origin);

参数含义

  • offset:偏移量。它表示要在流内移动的字节数。
  • origin:一个 SeekOrigin 枚举值,指定字节偏移量是相对于流的开头、当前位置还是结尾。
枚举值 含义
Begin 偏移量相对于流的开头。
Current 偏移量相对于流中的当前位置。
End 偏移量相对于流的结尾。

返回值

返回新的流位置。

示例说明

示例一:从 stream 开始处移动 10 个字节

using System;
using System.IO;
using System.Text;

class Program
{
    static void Main(string[] args)
    {
        string s = "Hello, world!";
        Console.WriteLine($"原始字符串:{s}");

        byte[] bytes = Encoding.Default.GetBytes(s);
        MemoryStream stream = new MemoryStream(bytes);

        int offset = 10;
        long newPosition = stream.Seek(offset, SeekOrigin.Begin);

        byte[] buffer = new byte[bytes.Length - offset];
        int bytesRead = stream.Read(buffer, 0, buffer.Length);

        string substring = Encoding.Default.GetString(buffer);
        Console.WriteLine($"新字符串:{substring}");

        stream.Close();
    }
}

示例二:从 stream 的结束处倒退 10 个字节

using System;
using System.IO;
using System.Text;

class Program
{
    static void Main(string[] args)
    {
        string s = "Hello, world!";
        Console.WriteLine($"原始字符串:{s}");

        byte[] bytes = Encoding.Default.GetBytes(s);
        MemoryStream stream = new MemoryStream(bytes);

        int offset = 10;
        long newPosition = stream.Seek(-offset, SeekOrigin.End);

        byte[] buffer = new byte[bytes.Length - newPosition];
        int bytesRead = stream.Read(buffer, 0, buffer.Length);

        string substring = Encoding.Default.GetString(buffer);
        Console.WriteLine($"新字符串:{substring}");

        stream.Close();
    }
}

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C# Stream.Seek – 在流中定位 - Python技术站

(0)
上一篇 2023年4月19日
下一篇 2023年4月19日

相关文章

  • 使用C#9中records作为强类型ID的实例教程

    使用C#9中records作为强类型ID可以让程序变得更加健壮和安全,让我们来一步步学习如何使用它。 什么是records? records是C#9的新特性,它是值类型,用来表示不可变的数据对象,其简洁的语法使得代码更加易读、易写。 在records类型中,可以定义只读属性、可写属性和自动属性,但是不允许定义私有控制器,因为records类型是不可变的。 下…

    C# 2023年5月31日
    00
  • China.com网站开发规范

    China.com网站开发规范 1. 前言 为了保证China.com网站的稳定性、可维护性和可扩展性,我们需要遵守一套标准的网站开发规范。本文档旨在为China.com网站的开发人员提供一些基本的规范和标准,帮助他们更好地编写规范化的代码并降低维护成本。 2. 代码规范 2.1. HTML规范 使用小写字母标签和属性,避免使用未定义的标签和属性 使用双引号…

    C# 2023年6月7日
    00
  • C#操作Byte数组和十六进制进行互转

    下面是详细讲解“C#操作Byte数组和十六进制进行互转”的完整攻略。 操作Byte数组和十六进制互转的准备工作 在C#中,我们可以使用byte数组来存储字节序列,用十六进制字符串来表示这些字节。在进行互转之前,需要对这些数据进行一些准备工作。 创建Byte数组 创建byte数组的方法很简单,可以使用byte[]关键字。 byte[] byteArray = …

    C# 2023年6月7日
    00
  • ASP.NET Core MVC 从入门到精通之HttpContext

    随着技术的发展,ASP.NET Core MVC也推出了好长时间,经过不断的版本更新迭代,已经越来越完善,本系列文章主要讲解ASP.NET Core MVC开发B/S系统过程中所涉及到的相关内容,适用于初学者,在校毕业生,或其他想从事ASP.NET Core MVC 系统开发的人员。 经过前几篇文章的讲解,初步了解ASP.NET Core MVC项目创建,启…

    C# 2023年5月7日
    00
  • Unity3D UI Text得分数字增加的实例代码

    下面我将为您详细讲解“Unity3D UI Text得分数字增加的实例代码”的完整攻略。在这个过程中,我会提供至少两条示例说明。 首先,我们需要明确这个实例代码的目的是什么,即在游戏中实时更新得分数字。在 Unity 中,我们可以使用 UI Text 组件来显示游戏界面上的得分数字。因此,我们需要对 UI Text 组件进行设置,以实现数字的增加效果。 接下…

    C# 2023年6月3日
    00
  • C#文件操作的简单实例

    我们来详细讲解一下”C#文件操作的简单实例”攻略。 概览 在C#中,文件操作主要包含5部分内容: 创建文件(Create File) 写入文件(Write to File) 读取文件(Read File) 删除文件(Delete File) 复制文件(Copy File) 下面我们将逐一介绍这些操作。 创建文件 我们可以使用File类的Create方法创建一…

    C# 2023年6月7日
    00
  • 如何用C#实现压缩文件

    如何用C#实现压缩文件 一、前言 在实际项目中,文件的压缩和解压缩是一个经常会用到的功能。本文将介绍如何使用C#语言实现文件的压缩和解压缩功能,以及附带两个示例说明。 二、压缩文件 1. 引入命名空间 首先需要引入System.IO.Compression和System.IO.Compression.FileSystem这两个命名空间。其中,System.I…

    C# 2023年6月1日
    00
  • Directory文件类的实例讲解

    当我们在进行网站或者应用程序的开发时,通常需要对文件进行管理。其中一个重要的文件类是Directory文件类。在这个话题中,我们将详细讲解Directory文件类的实例。 Directory文件类的作用 Directory是一个文件类,用于对文件夹进行操作。通过Directory文件类,我们可以创建、复制、移动、删除、枚举文件夹中的文件或子文件夹等操作。 D…

    C# 2023年6月1日
    00
合作推广
合作推广
分享本页
返回顶部