C# Stream.CopyTo – 复制流

  • Post category:C#

来讲解一下C#的Stream.CopyTo方法吧。

方法介绍

Stream.CopyTo方法是Stream类提供的一个实例方法,用于将当前流中的所有数据复制到另一个流中。该方法的具体定义为:

public void CopyTo(Stream destination);

其中,destination为目标流对象,用于接收当前流中的数据。该方法将从当前流的当前位置开始复制数据,并将复制后的位置设置为当前流的末尾。复制的过程会一直持续到当前流的末尾,直到复制所有数据为止。

方法使用攻略

步骤1:构造源流对象

首先,我们需要构造源流对象,可以使用FileStreamMemoryStreamNetworkStream等类型的流。

// 创建一个文件流对象
using var sourceStream = new FileStream("source.txt", FileMode.Open);

步骤2:构造目标流对象

其次,我们需要构造目标流对象,可以使用FileStreamMemoryStreamNetworkStream等类型的流。

// 创建一个文件流对象
using var destinationStream = new FileStream("destination.txt", FileMode.Create);

步骤3:调用CopyTo方法

最后,我们直接调用CopyTo方法即可将数据从源流复制到目标流中。

// 将源流中的所有数据复制到目标流中
sourceStream.CopyTo(destinationStream);

示例1:文件复制

以下示例演示从一个文件复制数据到另一个文件中。

using System;
using System.IO;

class Program
{
    static void Main(string[] args)
    {
        // 创建一个文件流对象
        using var sourceStream = new FileStream("source.txt", FileMode.Open);

        // 创建一个文件流对象
        using var destinationStream = new FileStream("destination.txt", FileMode.Create);

        // 将源流中的所有数据复制到目标流中
        sourceStream.CopyTo(destinationStream);
    }
}

示例2:内存流

以下示例演示从一个内存流复制数据到另一个内存流中。

using System;
using System.IO;

class Program
{
    static void Main(string[] args)
    {
        // 创建一个字节数组作为内存流的缓冲区
        var buffer = new byte[] { 0x01, 0x02, 0x03, 0x04, 0x05 };

        // 创建一个内存流对象
        using var sourceStream = new MemoryStream(buffer);

        // 创建一个内存流对象
        using var destinationStream = new MemoryStream();

        // 将源流中的所有数据复制到目标流中
        sourceStream.CopyTo(destinationStream);

        // 输出目标流中的数据
        foreach (var b in destinationStream.ToArray())
        {
            Console.Write($"{b:x2} ");
        }
        Console.WriteLine();
    }
}

以上两个示例演示了CopyTo方法在文件复制和内存流复制中的使用方法。可以根据场景使用不同类型的流,并且数据的复制可以是单向也可以是双向的。