在 C# 裡,透過 FileStream 可以很容易地完成檔案的讀/寫動作,有時候真的會覺得,它其實不難,但真要從無到有卻沒得參考還真的有點不方便,所以整理了一下基本的使用方式。更多有關檔案操作方法,可以參考《[C#] 檔案讀寫》這篇文章,寫得很詳細。
////// 將檔案寫到 Byte[] /// /// ///private byte[] File2Byte(string strFilePath) { FileStream fileStream = null; Byte[] fileBytes = null; if (File.Exists(strFilePath)) { try { fileStream = new FileStream(strFilePath, FileMode.Open, FileAccess.ReadWrite); fileBytes = new byte[(int)fileStream.Length]; //設定 fileBytes 的長度 fileStream.Read(fileBytes, 0, fileBytes.Length); //將 filestream 資料讀到 fileBytes } catch { } finally { fileStream.Close(); fileStream.Dispose(); } } return fileBytes; }
在 MSDN 的《FileStream 類別》有提到:「請確定對所有 FileStream 物件呼叫 Dispose 方法,尤其是在磁碟空間有限的環境中更應如此。如果沒有可用的磁碟空間,且在 FileStream 完成之前沒有呼叫 Dispose 方法,則執行 IO 作業可能會引發例外狀況。」雖然目前沒有直接可實驗的環境,就姑且信之,乖乖的加上一行 Dispose。
////// 將 Byte[] 資料寫到檔案 /// /// /// ///private bool Byte2File(byte[] bRead, string strNewFilePath) { FileStream fileStream = null; try { fileStream = new FileStream(strNewFilePath, FileMode.OpenOrCreate); fileStream.Write(bRead, 0, bRead.Length); } catch(Exception ex) { Response.Write(ex.Message); return false; } finally { fileStream.Close(); fileStream.Dispose(); } return true; }
呼叫讀檔/寫檔函式:
protected void btnFile2Byte_Click(object sender, EventArgs e) { //設定檔案來源 //string strFilePath = "D:\\upload\\projAply\\ann_e3wdwz10.xls"; string strFilePath = @"D:\upload\projAply\ann_e3wdwz10.xls"; //將來源檔案寫到 Byte[] bRead Byte[] bRead= File2Byte(strFilePath); //將 Byte[] bRead 裡的資料寫到檔案 Byte2File(bRead, "D:\\upload\\projAply\\ann_test.xls"); }
在設定檔案來源的地方,特別用了一個 「@」符號,其實是故意的。主要是想要特別分享這個好方法。原先使用單純的字串時,如果遇到反斜線(\)時,則必須使用雙反斜線(\\)來代表。但如果在字串前面加上 @ 符號後,後面的字串除了引號(")需要改用雙引號("")來替換之外,就不再需要考慮逸出字元的處理了,甚至連跨越數行都沒有問題。詳見:C#中的@符號。
Ref:
01.
[C#] 檔案讀寫
http://blog.xuite.net/autosun/study/32576568
02.
FileStream 類別
http://msdn.microsoft.com/zh-tw/library/system.io.filestream(v=vs.80).aspx
03.
C# byte[]和文件FileStream相互转化
http://www.cnblogs.com/wskfire/archive/2007/11/30/978212.html
04.
C#中的@符號
http://tc.wangchao.net.cn/bbs/detail_149142.html
05.
2.4.4.5 字串常值
http://msdn.microsoft.com/zh-tw/library/aa691090(v=vs.71).aspx
06.
C# 字串變數, 如何包含雙引號或反斜線
http://www.allenkuo.com/GenericArticle/view.aspx?id=28
沒有留言:
張貼留言