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 的對象”一節。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM