zoukankan      html  css  js  c++  java
  • 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:Usersexampleuserstart";
                string EndDirectory = @"c:Usersexampleuserend";
    
                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 的对象”一节。

  • 相关阅读:
    网页表单项Input的高级限制级用法
    程序员从初级到中级10个秘诀
    AspNet2.0页面生命周期(转载)
    WebService大讲堂之Axis2(4):二进制文件传输
    WebService大讲堂之Axis2(9):编写Axis2模块(Module)
    WebService大讲堂之Axis2(7):将Spring的装配JavaBean发布成WebService
    WebService大讲堂之Axis2(10):使用soapmonitor模块监视soap请求与响应消息
    WebService大讲堂之Axis2(5):会话(Session)管理
    lucence(补)
    WebService大讲堂之Axis2(6):跨服务会话(Session)管理
  • 原文地址:https://www.cnblogs.com/Tpf386/p/11587187.html
Copyright © 2011-2022 走看看