詳解C# FileStream類
C# FileStream類
在 C# 語(yǔ)言中文件讀寫流使用 FileStream 類來(lái)表示,F(xiàn)ileStream 類主要用于文件的讀寫,不僅能讀寫普通的文本文件,還可以讀取圖像文件、聲音文件等不同格式的文件。區(qū)別于File類的是它對(duì)文件可進(jìn)行分步讀寫,減小內(nèi)存壓力,缺點(diǎn)是我們需要手動(dòng)的關(guān)閉和釋放資源,
FileAccess
FileAccess 枚舉類型主要用于設(shè)置文件的訪問方式,具體的枚舉值如下。
● Read:以只讀方式打開文件。
● Write:以寫方式打開文件。
● ReadWrite:以讀寫方式打開文件。
FileMode
FileMode 枚舉類型主要用于設(shè)置文件打開或創(chuàng)建的方式,具體的枚舉值如下。
● CreateNew:創(chuàng)建新文件,如果文件已經(jīng)存在,則會(huì)拋出異常。
● Create:創(chuàng)建文件,如果文件不存在,則刪除原來(lái)的文件,重新創(chuàng)建文件。
● Open:打開已經(jīng)存在的文件,如果文件不存在,則會(huì)拋出異常。
● OpenOrCreate:打開已經(jīng)存在的文件,如果文件不存在,則創(chuàng)建文件。
● Truncate:打開已經(jīng)存在的文件,并清除文件中的內(nèi)容,保留文件的創(chuàng)建日期。如果文件不存在,則會(huì)拋出異常。
● Append:打開文件,用于向文件中追加內(nèi)容,如果文件不存在,則創(chuàng)建一個(gè)新文件。
FileShare
FileShare 枚舉類型主要用于設(shè)置多個(gè)對(duì)象同時(shí)訪問同一個(gè)文件時(shí)的訪問控制,具體的枚舉值如下。
● None:謝絕共享當(dāng)前的文件。
● Read:允許隨后打開文件讀取信息。
● ReadWrite:允許隨后打開文件讀寫信息。
● Write:允許隨后打開文件寫入信息。
● Delete:允許隨后刪除文件。
● Inheritable:使文件句柄可由子進(jìn)程繼承。
FileOptions
FileOptions 枚舉類型用于設(shè)置文件的高級(jí)選項(xiàng),包括文件是否加密、訪問后是否刪除等,具體的枚舉值如下。
● WriteThrough:指示系統(tǒng)應(yīng)通過(guò)任何中間緩存、直接寫入磁盤。
● None:指示在生成 System.IO.FileStream 對(duì)象時(shí)不應(yīng)使用其他選項(xiàng)。
● Encrypted:指示文件是加密的,只能通過(guò)用于加密的同一用戶賬戶來(lái)解密。
● DeleteOnClose:指示當(dāng)不再使用某個(gè)文件時(shí)自動(dòng)刪除該文件。
● SequentialScan:指示按從頭到尾的順序訪問文件。
● RandomAccess:指示隨機(jī)訪問文件。
● Asynchronous:指示文件可用于異步讀取和寫入。
FileStream 類的構(gòu)造方法有很多,這里介紹一些常用的構(gòu)造方法,如下表所示。
構(gòu)造方法 | 說(shuō)明 |
FileStream(string path, FileMode mode) | 使用指定路徑的文件、文件模式創(chuàng)建 FileStream 類的實(shí)例 |
FileStream(string path, FileMode mode, FileAccess access) | 使用指定路徑的文件、文件打開模式、文件訪問模式創(chuàng)建 FileStream 類的實(shí)例 |
FileStream(string path, FileMode mode, FileAccess access, FileShare share) | 使用指定的路徑、創(chuàng)建模式、讀寫權(quán)限和共享權(quán)限創(chuàng)建 FileStream 類的一個(gè)新實(shí)例 |
FileStream(string path, FileMode mode, FileAccess access, FileShare share, int bufferSize, FileOptions options) | 使用指定的路徑、創(chuàng)建模式、讀寫權(quán)限和共享權(quán)限、其他 文件選項(xiàng)創(chuàng)建 FileStream 類的實(shí)例 |
FileStream
屬性或方法 | 作用 |
bool CanRead | 只讀屬性,獲取一個(gè)值,該值指示當(dāng)前流是否支持讀取 |
bool CanSeek | 只讀屬性,獲取一個(gè)值,該值指示當(dāng)前流是否支持查找 |
bool CanWrite | 只讀屬性,獲取一個(gè)值,該值指示當(dāng)前流是否支持寫入 |
bool IsAsync | 只讀屬性,獲取一個(gè)值,該值指示 FileStream 是異步還 是同步打開的 |
long Length | 只讀屬性,獲取用字節(jié)表示的流長(zhǎng)度 |
string Name | 只讀屬性,獲取傳遞給構(gòu)造方法的 FileStream 的名稱 |
long Position | 屬性,獲取或設(shè)置此流的當(dāng)前位置 |
int Read(byte[] array, int offset, int count) | 從流中讀取字節(jié)塊并將該數(shù)據(jù)寫入給定緩沖區(qū)中 |
int ReadByte() | 從文件中讀取一個(gè)字節(jié),并將讀取位置提升一個(gè)字節(jié) |
long Seek(lorig offset, SeekOrigin origin) | 將該流的當(dāng)前位置設(shè)置為給定值 |
void Lock(long position, long length) | 防止其他進(jìn)程讀取或?qū)懭?System.IO.FileStream |
void Unlock(long position, long length) | 允許其他進(jìn)程訪問以前鎖定的某個(gè)文件的全部或部分 |
void Write(byte[] array, int offset, int count) | 將字節(jié)塊寫入文件流 |
void WriteByte(byte value) | 將一個(gè)字節(jié)寫入文件流中的當(dāng)前位置 |
File和FileStream的區(qū)別
File是一個(gè)靜態(tài)類;FileStream是一個(gè)非靜態(tài)類。
File:是一個(gè)文件的類,對(duì)文件進(jìn)行操作。其內(nèi)部封裝了對(duì)文件的各種操作(MSDN:提供用于創(chuàng)建、復(fù)制、刪除、移動(dòng)和打開單一文件的靜態(tài)方法,并協(xié)助創(chuàng)建FileStream對(duì)象)。
FileStream:文件流的類。對(duì)txt,xml,avi等文件進(jìn)行內(nèi)容寫入、讀取、復(fù)制...時(shí)候需要使用的一個(gè)工具。
創(chuàng)建實(shí)例
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 類的實(shí)例 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(); }
以上就是詳解C# FileStream類的詳細(xì)內(nèi)容,更多關(guān)于C# FileStream類的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
C#實(shí)現(xiàn)漢字轉(zhuǎn)拼音(多音字)功能詳解
這篇文章主要為大家詳細(xì)介紹了如何利用C#實(shí)現(xiàn)漢字轉(zhuǎn)拼音(支持多音字)的功能,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)C#有一定的幫助,感興趣的小伙伴可以跟隨小編一起了解一下2023-02-02C#實(shí)現(xiàn)中文驗(yàn)證碼的示例代碼
這篇文章主要為大家詳細(xì)介紹了如何利用C#實(shí)現(xiàn)中文驗(yàn)證碼功能,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)C#有一定的幫助,感興趣的小伙伴可以了解一下2022-12-12C#實(shí)現(xiàn)Winform鼠標(biāo)拖動(dòng)窗口大小時(shí)設(shè)定窗口最小尺寸的方法
這篇文章主要介紹了C#實(shí)現(xiàn)Winform鼠標(biāo)拖動(dòng)窗口大小時(shí)設(shè)定窗口最小尺寸的方法,涉及WinForm改變窗口大小時(shí)動(dòng)態(tài)判斷當(dāng)前窗口尺寸的相關(guān)技巧,非常簡(jiǎn)單實(shí)用,需要的朋友可以參考下2015-11-11Unity 實(shí)現(xiàn)給物體替換材質(zhì)球
這篇文章主要介紹了Unity 實(shí)現(xiàn)給物體替換材質(zhì)球的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-04-04