C# Stream.Seek – 在流中定位

yizhihongxing

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日

相关文章

  • .net中最简单的http请求调用(比如调用chatgpt的openAI接口)

    支持.Net Core(2.0及以上)/.Net Framework(4.5及以上),可以部署在Docker, Windows, Linux, Mac。 http请求调用是开发中经常会用到的功能,因为,很多第三方功能接口往往是通过http地址的形式提供的,比如:ChatGpt、OpenAI、短信服务、在线翻译、地图服务、语音智能、等…   .net中调用ht…

    C# 2023年5月5日
    00
  • ASP.net Substitution 页面缓存而部分不缓存的实现方法

    ASP.NET Substitution 页面缓存是指在对于某些页面的内容经常变化的情况下,我们可以启用页面缓存,但仍然让部分内容保持实时刷新的功能。本篇攻略将会为大家介绍如何实现此功能。 使用 Substitution 控件 我们可以使用 Substitution 控件的方式来实现 ASP.NET Substitution 页面缓存而部分不缓存的功能,具体…

    C# 2023年6月3日
    00
  • ASP.Net Core基于ABP架构配置To Json序列化

    ASP.Net Core是一个非常流行的Web开发框架,而ABP则为开发者提供了很多基础框架和模块来简化开发流程,因此很多开发者选择使用ABP来开发自己的ASP.Net Core应用程序。在使用ABP中,有时候需要将对象转换成JSON字符串,这时可以使用To Json序列化,下面介绍ASP.Net Core基于ABP架构配置To Json序列化的详细攻略。 …

    C# 2023年5月31日
    00
  • C#使用命名管道Pipe进行进程通信实例详解

    下面我会给出一份完整的“C#使用命名管道Pipe进行进程通信实例详解”的攻略。 1. 什么是命名管道 命名管道(Named Pipe)是一种进程间通信(IPC)的方式,通过以名称命名的管道进行数据交换,起到了进程之间传输数据的作用。 命名管道通过文件系统创建,并且在创建的时候必须指定管道的名称。该名称由一些不包含任何非法字符的字符组成(例如,反斜杠 “\”)…

    C# 2023年6月1日
    00
  • C#从数据库读取数据到DataSet并保存到xml文件的方法

    下面是详细讲解“C#从数据库读取数据到DataSet并保存到xml文件的方法”的完整攻略: 步骤1:连接数据库并读取数据 首先,需要在代码中连接数据库,从中读取数据,并将其存储在内存中的 DataSet 中。可以使用 SqlConnection 和 SqlDataAdapter 类来实现这个步骤。下面是一个示例代码: string connectionStr…

    C# 2023年5月31日
    00
  • C#中IntPtr类型的具体使用

    当需要动态操作内存时,C# 提供了一个 IntPtr 类型,该类型可以包含一个指针或句柄的值。 在C#中,IntPtr类型被广泛使用,它定义为和平台相关大小的整数,通常是32位或64位整数数据类型。一般来说,IntPtr类型在本机环境下使用。下面是IntPtr类的语法。 public struct System.IntPtr : System.Runtime…

    C# 2023年5月31日
    00
  • 详解.NET Core使用Quartz执行调度任务进阶

    在 .NET Core 中,可以使用 Quartz.NET 来执行调度任务。Quartz.NET 是一个开源的作业调度框架,可以用于在 .NET 应用程序中执行定时任务、计划任务等。以下是详解 .NET Core 使用 Quartz 执行调度任务进阶的完整攻略: 步骤一:安装 Quartz.NET 在 .NET Core 项目中,可以使用 NuGet 包管理…

    C# 2023年5月17日
    00
  • C#使用Selenium+PhantomJS抓取数据

    我会为您提供一份详细的攻略。 1. 准备工作 如果您需要使用C#编写程序来使用Selenium和PhantomJS抓取网页数据,那么您需要先准备以下几个工具和组件: Visual Studio:C#开发环境 Selenium WebDriver:Selenium C#库 PhantomJS:无头浏览器 2. 安装和设置Selenium和PhantomJS 安…

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