C# FileStream類

来源:https://www.cnblogs.com/ouyangkai/archive/2020/04/25/12771477.html
-Advertisement-
Play Games

C FileStream類 在 C 語言中文件讀寫流使用 FileStream 類來表示,FileStream 類主要用於文件的讀寫,不僅能讀寫普通的文本文件,還可以讀取圖像文件、聲音文件等不同格式的文件。區別於File類的是它對文件可進行分步讀寫,減小記憶體壓力,缺點是我們需要手動的關閉和釋放資源, ...


C# FileStream類

在 C# 語言中文件讀寫流使用 FileStream 類來表示,FileStream 類主要用於文件的讀寫,不僅能讀寫普通的文本文件,還可以讀取圖像文件、聲音文件等不同格式的文件。區別於File類的是它對文件可進行分步讀寫,減小記憶體壓力,缺點是我們需要手動的關閉和釋放資源,

FileAccess

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

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

FileMode

FileMode 枚舉類型主要用於設置文件打開或創建的方式,具體的枚舉值如下。

  • CreateNew:創建新文件,如果文件已經存在,則會拋出異常。
  • Create:創建文件,如果文件不存在,則刪除原來的文件,重新創建文件。
  • Open:打開已經存在的文件,如果文件不存在,則會拋出異常。
  • OpenOrCreate:打開已經存在的文件,如果文件不存在,則創建文件。
  • Truncate:打開已經存在的文件,並清除文件中的內容,保留文件的創建日期。如果文件不存在,則會拋出異常。
  • Append:打開文件,用於向文件中追加內容,如果文件不存在,則創建一個新文件。

FileShare

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

  • None:謝絕共用當前的文件。
  • Read:允許隨後打開文件讀取信息。
  • ReadWrite:允許隨後打開文件讀寫信息。
  • Write:允許隨後打開文件寫入信息。
  • Delete:允許隨後刪除文件。
  • Inheritable:使文件句柄可由子進程繼承。

FileOptions

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

  • WriteThrough:指示系統應通過任何中間緩存、直接寫入磁碟。
  • None:指示在生成 System.IO.FileStream 對象時不應使用其他選項。
  • Encrypted:指示文件是加密的,只能通過用於加密的同一用戶賬戶來解密。
  • DeleteOnClose:指示當不再使用某個文件時自動刪除該文件。
  • SequentialScan:指示按從頭到尾的順序訪問文件。
  • RandomAccess:指示隨機訪問文件。
  • Asynchronous:指示文件可用於非同步讀取和寫入。

FileStream 類的構造方法有很多,這裡介紹一些常用的構造方法,如下表所示。

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

FileStream

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

File和FileStream的區別

File是一個靜態類;FileStream是一個非靜態類。

File:是一個文件的類,對文件進行操作。其內部封裝了對文件的各種操作(MSDN:提供用於創建、複製、刪除、移動和打開單一文件的靜態方法,並協助創建FileStream對象)。

  FileStream:文件流的類。對txt,xml,avi等文件進行內容寫入、讀取、複製...時候需要使用的一個工具。

創建實例

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";
        //創建 FileStream 類的實例
        FileStream fileStream = new FileStream(path, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite);
        //定義屬性
        string msg = "11111";
        //將字元串轉換為位元組數組
        byte[] bytes = Encoding.UTF8.GetBytes(msg);
        //向文件中寫入位元組數組
        fileStream.Write(bytes, 0, bytes.Length);
        //刷新緩衝區
        fileStream.Flush();
        //關閉流
        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);
            //定義存放文件信息的位元組數組
            byte[] bytes = new byte[fileStream.Length];
            //讀取文件信息
            fileStream.Read(bytes, 0, bytes.Length);
            //將得到的位元組型數組重寫編碼為字元型數組
            char[] c = Encoding.UTF8.GetChars(bytes);
            //輸出
            Console.WriteLine(c);
            //關閉流
            fileStream.Close();
        }
        else
        {
            Console.WriteLine("不存在!");
        }
    }
}

文件複製

 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)
                     { 
                         //返回讀取位元組數
                        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();

        }

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 0. 前言 上一篇內容介紹了Console類和Math類,這篇內容著重介紹一下C 中時間日期的處理方式。 上一篇勘誤: 上一篇中關於靜態類沒有構造函數,這一表述有誤。正確的說法是C 中靜態類不包含常規構造函數,但可以添加一個靜態構造函數。 靜態構造函數與普通普通構造函數的區別是,靜態構造函數沒有訪問 ...
  • 前言: 這是 項目實踐系列 , 算是中高級系列博文, 用於為項目開發過程中不好解決的問題提出解決方案的. 不屬於入門級系列. 解釋起來也比較跳躍, 只講重點. 因為有網友的項目需求, 所以提前把這些解決方案做出來並分享. 問題: Blazor自己是攜帶一個簡單的路由功能的, 當切換Url的時候, 整 ...
  • 開題 ​ 既然決定了開始寫博客,那就從讀ASP.NET core的源碼開始吧!對於我這個不怎麼善於寫文章的人來說,也算是鍛煉鍛煉自己歸納總結能力。 千里之行,始於足下 ​ 俗話說,“千里之行,始於足下”,我們先看看ASP.NET core的 是如何使用的。為了方便說明,這裡建立的 的測試工程,使用 ...
  • 最近2年一直能看到 Net Core的介紹,看到支持WPF和Winform引起了興趣,寫簡單Demo運行看效果和瞭解部署。 現在準備把項目正式遷移到.Net Core, 就先用了一個比較單一的項目試試,編譯很大部分很順利通過,沒有什麼需要註意, 也就沒有什麼印象,一運行不得了各種報錯。 也沒有去看具... ...
  • 我想快速給WPF程式添加托盤菜單 1 簡單要求: 使用開源控制項庫 在XAML中聲明托盤菜單,就像給控制項添加ContextMenu一樣 封裝了常用命令,比如:打開主窗體、退出應用程式等 我在TerminalMACS中添加了托盤菜單,最終實現的托盤菜單效果: 2 如何做? 【Step 1】在已創建的WP ...
  • 一、原理與環境 在生成數據表的實體類時,利用自定義特性,給它打上表及欄位的特性,然後使用反射原理,將自定義特性拼接成增、刪、改、查對應的SQL,即可完成一個簡單的ORM。 本示例的執行環境: 1)資料庫:SQL Server。(可根據自己的需要,建立不同的資料庫工廠。) 2)數據表:需使用自增類型( ...
  • 被微軟收購的 GitHub 現在十分土豪,提供了免費的伺服器給咱構建。剛好微軟對 dotnet 的支持是特別好的,畢竟還算半個自家的東西,大概只需要 3 分鐘就可以在 github 上通過 Action 部署持續集成,本文以 SourceYard 作為例子告訴大家如何配置 ...
  • Ffmpeg的視頻操作官網文檔:https://ffmpeg.org/ffmpeg-filters.html#Video-Filters 視頻壓縮用到的參數主要為以下幾個: 文件路徑:-i 輸入文件的路徑 碼率:-b:v 輸出文件的碼率 解析度:-s 輸出文件的解析度; 幀率:-r 輸出文件的幀率值 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...