C#中流Stream的使用-学习

概念

提供字节序列的通用视图。这是一个抽象类。

子类:

    Microsoft.JScript.COMCharStream
    System.Data.OracleClient.OracleBFile
    System.Data.OracleClient.OracleLob
    System.Data.SqlTypes.SqlFileStream
    System.IO.BufferedStream
    System.IO.FileStream
    System.IO.MemoryStream
    System.IO.UnmanagedMemoryStream
    System.IO.Compression.BrotliStream
    System.IO.Compression.DeflateStream
    System.IO.Compression.GZipStream
    System.IO.IsolatedStorage.IsolatedStorageFileStream
    System.IO.Pipes.PipeStream
    System.Net.Security.AuthenticatedStream
    System.Net.Sockets.NetworkStream
    System.Printing.PrintQueueStream
    System.Security.Cryptography.CryptoStream

示例

下面的示例演示如何使用两个FileStream对象将文件从一个目录异步复制到另一个目录。

FileStream 类是从 Stream 类派生的。 需要注意 Click 控件的 Button 事件处理程序具有 async 修饰符标记,因为它调用异步方法。

using System;
using System.Threading.Tasks;
using System.Windows;
using System.IO;

namespace WpfApplication
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private async void Button_Click(object sender, RoutedEventArgs e)
        {
            string StartDirectory = @"c:\Users\exampleuser\start";
            string EndDirectory = @"c:\Users\exampleuser\end";

            foreach (string filename in Directory.EnumerateFiles(StartDirectory))
            {
                using (FileStream SourceStream = File.Open(filename, FileMode.Open))
                {
                    using (FileStream DestinationStream = File.Create(EndDirectory + filename.Substring(filename.LastIndexOf('\\'))))
                    {
                        await SourceStream.CopyToAsync(DestinationStream);
                    }
                }
            }
        }
    }
}

 Stream所有流的抽象基类。

流是字节序列的抽象,例如文件、输入/输出设备、进程中通信管道或 TCP/IP 套接字。

Stream类及其派生类提供这些不同类型的输入和输出的一般视图,并将程序员与操作系统和基础设备的具体详细信息隔离开来。

 

流涉及三个基本操作:

  • 可以从流中读取。 读取是将数据从流传输到数据结构(如字节数组)中。

  • 可以写入流。 写入是指将数据从数据结构传输到流中。

  • 流可以支持查找。 查找是指查询和修改流中的当前位置。 查找功能取决于流具有的后备存储的类型。 例如,网络流没有当前位置的统一概念,因此通常不支持查找。

 

继承自Stream的一些常用流是FileStream、和MemoryStream

根据基础数据源或存储库,流可能只支持其中一些功能。 您可以使用CanRead Stream类的、 CanWriteCanSeek属性查询流的功能。

ReadWrite方法读取和写入各种格式的数据。 对于支持查找的流,请使用SeekSetLength方法, Position并使用Length和属性来查询和修改流的当前位置和长度。

此类型实现 IDisposable 接口。 在使用完类型后,您应直接或间接释放类型。 若要直接释放类型,请在 try/catch 块中调用其 Dispose 方法。 若要间接释放类型,请使用 using(在 C# 中)或 Using(在 Visual Basic 中)等语言构造。 有关详细信息,请参阅 IDisposable 接口主题中的“使用实现 IDisposable 的对象”一节。

 

posted on 2019-09-25 20:23  荆棘人  阅读(4244)  评论(1编辑  收藏  举报

导航