溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

C#中FileStream類的詳細解析

發(fā)布時間:2020-07-17 11:22:03 來源:億速云 閱讀:364 作者:小豬 欄目:編程語言

小編這次要給大家分享的是C#中FileStream類的詳細解析,文章內(nèi)容豐富,感興趣的小伙伴可以來了解一下,希望大家閱讀完這篇文章之后能夠有所收獲。

C# FileStream類

在 C# 語言中文件讀寫流使用 FileStream 類來表示,F(xiàn)ileStream 類主要用于文件的讀寫,不僅能讀寫普通的文本文件,還可以讀取圖像文件、聲音文件等不同格式的文件。區(qū)別于File類的是它對文件可進行分步讀寫,減小內(nèi)存壓力,缺點是我們需要手動的關(guān)閉和釋放資源,

FileAccess

FileAccess 枚舉類型主要用于設(shè)置文件的訪問方式,具體的枚舉值如下。

    ●  Read:以只讀方式打開文件。
    ●  Write:以寫方式打開文件。
    ●  ReadWrite:以讀寫方式打開文件。

FileMode

FileMode 枚舉類型主要用于設(shè)置文件打開或創(chuàng)建的方式,具體的枚舉值如下。

    ●  CreateNew:創(chuàng)建新文件,如果文件已經(jīng)存在,則會拋出異常。

    ●  Create:創(chuàng)建文件,如果文件不存在,則刪除原來的文件,重新創(chuàng)建文件。

    ●  Open:打開已經(jīng)存在的文件,如果文件不存在,則會拋出異常。

    ●  OpenOrCreate:打開已經(jīng)存在的文件,如果文件不存在,則創(chuàng)建文件。

    ●  Truncate:打開已經(jīng)存在的文件,并清除文件中的內(nèi)容,保留文件的創(chuàng)建日期。如果文件不存在,則會拋出異常。

    ●   Append:打開文件,用于向文件中追加內(nèi)容,如果文件不存在,則創(chuàng)建一個新文件。

FileShare

FileShare 枚舉類型主要用于設(shè)置多個對象同時訪問同一個文件時的訪問控制,具體的枚舉值如下。

    ●  None:謝絕共享當(dāng)前的文件。

    ●  Read:允許隨后打開文件讀取信息。

    ●  ReadWrite:允許隨后打開文件讀寫信息。

    ●  Write:允許隨后打開文件寫入信息。

    ●  Delete:允許隨后刪除文件。

    ●  Inheritable:使文件句柄可由子進程繼承。

FileOptions

FileOptions 枚舉類型用于設(shè)置文件的高級選項,包括文件是否加密、訪問后是否刪除等,具體的枚舉值如下。

    ●  WriteThrough:指示系統(tǒng)應(yīng)通過任何中間緩存、直接寫入磁盤。

    ●  None:指示在生成 System.IO.FileStream 對象時不應(yīng)使用其他選項。

    ● Encrypted:指示文件是加密的,只能通過用于加密的同一用戶賬戶來解密。

    ●  DeleteOnClose:指示當(dāng)不再使用某個文件時自動刪除該文件。

    ● SequentialScan:指示按從頭到尾的順序訪問文件。

    ● RandomAccess:指示隨機訪問文件。

    ● Asynchronous:指示文件可用于異步讀取和寫入。

FileStream 類的構(gòu)造方法有很多,這里介紹一些常用的構(gòu)造方法,如下表所示。

構(gòu)造方法說明
FileStream(string path, FileMode mode)使用指定路徑的文件、文件模式創(chuàng)建 FileStream 類的實例
FileStream(string path, FileMode mode, FileAccess access)使用指定路徑的文件、文件打開模式、文件訪問模式創(chuàng)建 FileStream 類的實例
FileStream(string path, FileMode mode, FileAccess access, FileShare share)使用指定的路徑、創(chuàng)建模式、讀寫權(quán)限和共享權(quán)限創(chuàng)建 FileStream 類的一個新實例
FileStream(string path, FileMode mode, FileAccess access, FileShare share, int bufferSize, FileOptions options)使用指定的路徑、創(chuàng)建模式、讀寫權(quán)限和共享權(quán)限、其他 文件選項創(chuàng)建 FileStream 類的實例

FileStream

屬性或方法作用
bool CanRead只讀屬性,獲取一個值,該值指示當(dāng)前流是否支持讀取
bool CanSeek只讀屬性,獲取一個值,該值指示當(dāng)前流是否支持查找
bool CanWrite只讀屬性,獲取一個值,該值指示當(dāng)前流是否支持寫入
bool IsAsync只讀屬性,獲取一個值,該值指示 FileStream 是異步還 是同步打開的
long Length只讀屬性,獲取用字節(jié)表示的流長度
string Name只讀屬性,獲取傳遞給構(gòu)造方法的 FileStream 的名稱
long Position屬性,獲取或設(shè)置此流的當(dāng)前位置
int Read(byte[] array, int offset, int count)從流中讀取字節(jié)塊并將該數(shù)據(jù)寫入給定緩沖區(qū)中
int ReadByte()從文件中讀取一個字節(jié),并將讀取位置提升一個字節(jié)
long Seek(lorig offset, SeekOrigin origin)將該流的當(dāng)前位置設(shè)置為給定值
void Lock(long position, long length)防止其他進程讀取或?qū)懭?System.IO.FileStream
void Unlock(long position, long length)允許其他進程訪問以前鎖定的某個文件的全部或部分
void Write(byte[] array, int offset, int count)將字節(jié)塊寫入文件流
void WriteByte(byte value)將一個字節(jié)寫入文件流中的當(dāng)前位置

File和FileStream的區(qū)別

File是一個靜態(tài)類;FileStream是一個非靜態(tài)類。

File:是一個文件的類,對文件進行操作。其內(nèi)部封裝了對文件的各種操作(MSDN:提供用于創(chuàng)建、復(fù)制、刪除、移動和打開單一文件的靜態(tài)方法,并協(xié)助創(chuàng)建FileStream對象)。

  FileStream:文件流的類。對txt,xml,avi等文件進行內(nèi)容寫入、讀取、復(fù)制...時候需要使用的一個工具。

創(chuàng)建實例

string path = "D:\\test.txt";

FileStream fileStream1 = **new** FileStream(path, FileMode.Open);

FileStream fileStream2 = **new** FileStream(path, FileMode.Open, FileAccess.Read);

FileStream fileStream3 = **new** FileStream(path, FileMode.Open, FileAccess.ReadWrite, FileShare.Read);

FileStream fileStream4 = **new** FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read, 10, FileOptions.None);
    //定義文件路徑
    string path = @"D:\\code\\test.txt";
    //創(chuàng)建 FileStream 類的實例
    FileStream fileStream = new FileStream(path, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite);
    //定義屬性
    string msg = "11111";
    //將字符串轉(zhuǎn)換為字節(jié)數(shù)組
    byte[] bytes = Encoding.UTF8.GetBytes(msg);
    //向文件中寫入字節(jié)數(shù)組
    fileStream.Write(bytes, 0, bytes.Length);
    //刷新緩沖區(qū)
    fileStream.Flush();
    //關(guān)閉流
    fileStream.Close();
class Program
{
  static void Main(string[] args)
  {
    //定義文件路徑
    string path = @"D:\\code\\test.txt";
    //判斷是否含有指定文件
    if (File.Exists(path))
    {
      FileStream fileStream = new FileStream(path, FileMode.Open, FileAccess.Read);
      //定義存放文件信息的字節(jié)數(shù)組
      byte[] bytes = new byte[fileStream.Length];
      //讀取文件信息
      fileStream.Read(bytes, 0, bytes.Length);
      //將得到的字節(jié)型數(shù)組重寫編碼為字符型數(shù)組
      char[] c = Encoding.UTF8.GetChars(bytes);
      //輸出
      Console.WriteLine(c);
      //關(guān)閉流
      fileStream.Close();
    }
    else
    {
      Console.WriteLine("不存在!");
    }
  }
}

文件復(fù)制

 public class FileSreamTest
  {
    

    public static void CopyFile(string source,string target)
    {
      //讀取文件流
      using (FileStream fsRead = new FileStream(source,FileMode.Open,FileAccess.Read))
      {
        //寫入流
        using (FileStream fsWrite = new FileStream(target,FileMode.OpenOrCreate,FileAccess.Write))
        {
           byte[] buffer = new byte[1024*1024*5];

           while (true)
           { 
             //返回讀取字節(jié)數(shù)
            int r= fsRead.Read(buffer,0,buffer.Length);
            if (r==0)
            {
              break;
            }
             //寫入
             fsWrite.Write(buffer,0,r);
           }
          
        }
      }
    }

  }



  static void Main(string[] args)
    {
     string source =@"E:\功能流程.7z";
     string target=@"C:\Users\CH190006\Desktop\Test\功能流程.7z";
     FileSreamTest.CopyFile(source,target);
      Console.ReadKey();

    }

看完這篇關(guān)于C#中FileStream類的詳細解析的文章,如果覺得文章內(nèi)容寫得不錯的話,可以把它分享出去給更多人看到。

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI