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();
}