第12章 伺服器的檔案處理 12-1 System.IO類別的基礎 12-2 檔案與資料夾操作 12-3 文字檔案的寫入

Slides:



Advertisements
Similar presentations
第一單元 建立java 程式.
Advertisements

第15章 文件处理技术 变量和数组只能临时存储数据,且数据量很小, 当应用程序终止,数据就会丢失。如果需要将数 据长期存储或者存储大量数据,就需要用到文件。 文件维护的数据通常称为持久数据,存储在计算 机的辅助存储设备中,如磁盘、光盘等。许多程 序都要与外部数据进行交互,如数据库、XML,甚 至文本文件,因此文件操作是软件开发中必不可.
計算機程式語言實習課.
File Access 井民全製作.
Ch08 基本輸出入與檔案處理 物件導向系統實務.
第9章 例外與檔案處理 9-4 檔案與資料夾處理 9-5 Java的輸入/輸出串流 9-6 檔案的讀取與寫入.
第13章 檔案與資料夾處理 13-1 System.IO類別的基礎 13-2 檔案與資料夾操作 13-3 文字檔案的讀寫
C#.
程式語言的基礎 Input Output Program 世代 程式語言 第一世代 Machine language 第二世代
第十四章 I/O與資料流處理.
LINQ 建國科技大學 資管系 饒瑞佶.
Java 的例外與輸入出檔案處理 Jing Ming Huang.
Chapter 8 檔案.
JAVA 程式設計與資料結構 第十二章 JAR File.
第14章 建立網路應用程式 14-1 瀏覽器的建立 14-2 檔案下載器 14-3 寄送電子郵件 14-4 檢查POP 3的電子郵件.
進階 WWW 程式設計 -- PHP Regular Expression 靜宜大學資訊管理學系 蔡奇偉副教授 2004
Ch11 檔案存取 網頁程式設計.
JAVA 程式設計與資料結構 第六章 輸出與輸入.
第十三章 文件和注册表操作.
客戶端的檔案上傳 HtmlInputFile檔案控制項 上傳單一檔案 同時上傳多個檔案.
王豐緒 銘傳大學資訊工程學系 問題:JAVA 二元檔輸出入.
ASP.NET 網頁製作教本 – 從基本語法學起
類別(class) 類別class與物件object.
SQL Stored Procedure SQL 預存程序.
讲课人:王璞 浙江工商职业技术学院.
第14章 伺服器檔案、電子郵件處理與Ajax 14-1 資料夾與檔案操作 14-2 文字檔案的讀寫 14-3 電子郵件與附檔處理
網頁切換移轉 JS vs. ASP.NET.
文件流. 文件流 文件流 Stream FileStream BufferedStream MemoryStream NetworkStream …… 所有流的抽象 Stream FileStream BufferedStream MemoryStream NetworkStream ……
第7章 Web伺服器檔案與XML文件的處理 7-1 System.IO名稱空間的基礎 7-2 伺服器的資料夾與檔案操作
第5章 .NET框架类 5.
|13 檔案資料讀寫.
Ch10 字元與字串 物件導向程式設計(II).
檔案與磁碟的基本介紹.
例外處理與 物件序列化(Exception Handling and Serialization of Objects)
檔案讀寫與例外處理 (File IO and Exception Handling)
Java 程式設計 講師:FrankLin.
第 十二 章 C# 中的文件处理.
第10章 檔案與資料夾處理 10-1 檔案的基礎 10-2 文字檔案的讀寫 10-3 二進位檔案的讀寫 10-4 檔案與資料夾處理.
網頁切換移轉 JS vs. ASP.NET.
JAVA 程式設計與資料結構 第四章 陣列、字串與數學物件.
第一單元 建立java 程式.
VS.NET 2003 IDE.
網頁程式設計 本章投影片錄自HTML5、CSS3、RWD、jQuery Mobile跨裝網頁設計 陳惠貞 著 碁峰資訊股份有限公司出版
VB2005 DataBase Manipulation Command for Access
第 19 章 XML記憶體執行模式.
雲端計算.
第一次Labview就上手 參考書籍: LabVIEW for Everyone (Jeffrey Travis/Jim Kring)
1 Session对象的特性 Session 状态对象 Session 对象常用的方法有: Session 对象常用的属性有:
期末考.
個人網路空間 資訊教育.
VS.NET 2003 IDE.
如何使用Gene Ontology 網址:
引用檔案.
File Input and Output Chap. 11: 施威銘的書 Chap. 7: K&R.
利用 EditorConfig 自訂文字編輯器設定
挑戰C++程式語言 ──第7章 輸入與輸出.
MiRanda Java Interface v1.0的使用方法
陣列與結構.
第10章 檔案系統 (file system).
程式移植.
Chapter 15 檔案存取 LabVIEW中的檔案存取函數也可將程式中的資料儲存成Excel或Word檔。只要將欲存取的檔案路徑位址透過LabVIEW中的路徑元件告訴檔案存取函數後,LabVIEW便可將資料存成Excel或Word檔;當然也可以將Excel或Word檔的資料讀入LabVIEW的程式中。
進階UI元件:ListView元件以及複選 靜宜大學資管系 楊子青
班級:博碩子一甲 授課老師:鐘國家 助教:陳國政
資料結構與C++程式設計進階 期末考 講師:林業峻 CSIE, NTU 7/ 15, 2010.
C#快速導讀 流程控制.
openFileDialog1.ShowDialog() 對話匣
String類別 在C語言中提供兩種支援字串的方式 可以使用傳統以null結尾的字元陣列 使用string類別
Unix指令4-文字編輯與程式撰寫.
Develop and Build Drives by Visual C++ IDE
InputStreamReader Console Scanner
Presentation transcript:

第12章 伺服器的檔案處理 12-1 System.IO類別的基礎 12-2 檔案與資料夾操作 12-3 文字檔案的寫入 12-4 文字檔案的讀取 12-5 二進位檔案的處理

12-1 System.IO類別的基礎-說明 .NET Framework的檔案與資料夾處理屬於System.IO名稱空間,在ASP.NET.NET程式只需匯入此名稱空間,就可以存取伺服器的檔案系統,或是處理文字或二進位檔案的「串流」(Streams)。

12-1 System.IO類別的基礎-類別 System.IO名稱空間關於檔案和資料夾處理的類別,如下表所示:

12-2 檔案與資料夾操作 12-2-1 顯示檔案與資料夾清單 12-2-2 建立文字檔案 12-2-3 檢查檔案是否存在 12-2-4 刪除檔案 12-2-5 取得檔案資訊

12-2-1 顯示檔案與資料夾清單-顯示資料夾清單1 DirectoryInfo物件的GetDirectories()方法可以取得指定資料夾的清單,如下所示: DirectoryInfo dirInfo = new DirectoryInfo(path); try { DirectoryInfo[] subDirs = dirInfo.GetDirectories(); for (i = 0; i < subDirs.Length; i++) { Response.Write(subDirs[i].Name + "<br/>"); } catch (DirectoryNotFoundException ex) { Response.Write(ex.Message + "<br/>");

12-2-1 顯示檔案與資料夾清單-顯示資料夾清單2 然後使用for迴圈顯示資料夾清單,如下所示: for (i = 0; i < subDirs.Length; i++) { Response.Write(subDirs[i].Name + "<br/>"); } 上述程式碼的Length屬性是陣列尺寸,在使用陣列索引取得每一個資料夾的DirectoryInfo物件後,使用Name屬性取得資料夾名稱。

顯示目錄及檔案完整範例 protected void Button1_Click(object sender, EventArgs e) { int i; DirectoryInfo dir = new DirectoryInfo("c:\\"); DirectoryInfo[] subdirs = dir.GetDirectories(); for (i = 0; i < subdirs.Length; i++) Response.Write(subdirs[i].Name + "<br>"); } FileInfo[] subfiles = dir.GetFiles(); foreach (FileInfo subfile in subfiles) Response.Write(subfile.Name + "<br>");

12-2-2 建立文字檔案 在ASP.NET程式可以使用System.IO名稱空間的類別,在伺服端建立文字檔案,我們只需建立好FileInfo物件,如下所示: FileInfo fileInfo = new FileInfo(path); 在建立好FileInfo物件後,就可以使用CreateText()方法建立文字檔案,如下所示: fileInfo.CreateText(); 上述程式碼可以將FileInfo物件的檔案路徑建立成文字檔案。

12-2-3 檢查檔案是否存在 在進行檔案操作前,通常都需要先檢查檔案是否存在,ASP.NET程式在建立好FileInfo物件後,可以使用Exists屬性來檢查檔案是否存在,如下所示: if (fileInfo.Exists) { ……… } 上述if條件使用Exists屬性檢查檔案是否存在,如果檔案存在傳回true,否則為false。

12-2-4 刪除檔案 如果需要刪除伺服器檔案,可以使用FileInfo物件的Delete()方法來刪除檔案,如下所示: 上述程式碼使用FileInfo物件fileInfo的Delete()方法來刪除檔案。

12-2-5 取得檔案資訊-說明 FileInfo類別屬性可以取得檔案資訊,首先建立FileInfo檔案物件fInfo,如下所示: FileInfo fInfo = new FileInfo(path); 上述程式碼的建構子參數是檔案實際路徑,在建立好物件後,就可以使用FileInfo物件屬性取得檔案資訊。

12-2-5 取得檔案資訊-屬性

12-3 文字檔案的寫入 12-3-1 如何讀取與寫入文字檔案 12-3-2 寫入資料到文字檔案 12-3-3 寫入換行資料到文字檔案 12-3-4 新增文字到文字檔案

12-3-1 如何讀取與寫入文字檔案-說明 串流(Stream)觀念最早是使用在Unix作業系統,串流模型如同水管中的水流。當程式開啟檔案來源的輸入串流後,ASP.NET程式就可以從輸入串流依序讀取資料,如下圖所示: 上述圖例的左半邊是讀取資料的輸入串流,如果程式需要輸出資料,在右半邊可以開啟目的檔案的輸出串流,將資料寫入串流。

12-3-1 如何讀取與寫入文字檔案- 步驟一:開啟或建立文字檔案1 FileInfo類別的CreateText()方法可以建立全新文字檔案(詳見第12-2-2節),如下所示: StreamWriter sw = fileInfo.CreateText(); 程式碼建立StreamWriter文字串流寫入物件,這是新檔案,或是使用StreamReader或StreamWriter開啟存在的文字檔案,如下所示: StreamReader sr = new StreamReader(path); 程式碼建立StreamReader文字串流讀取物件,可以讀取文字檔案的內容,path建構子參數是文字檔案路徑。

12-3-1 如何讀取與寫入文字檔案- 步驟一:開啟或建立文字檔案2 如果是寫入資料,請使用StreamWriter類別,如下所示: StreamWriter sw = new StreamWriter(path); 上述程式碼建立StreamWriter文字串流寫入物件,可以將文字內容寫入檔案。 如果是在檔案最後新增文字內容,請使用FileInfo類別的AppendText()方法來開啟StreamWrite串流,如下所示: StreamWriter sw = fileInfo.AppendText();

12-3-1 如何讀取與寫入文字檔案- 步驟二:讀寫文字檔案串流 在建立StreamReader和StreamWriter串流物件後,就可以使用方法來執行文字檔案的讀寫。

12-3-1 如何讀取與寫入文字檔案- 步驟三:關閉文字檔案串流 在處理完文字檔案讀寫後,請記得將緩衝區資料寫入和關閉檔案串流,如下所示: sw.Flush(); sw.Close();

12-3-2 寫入資料到文字檔案 StreamWriter串流物件可以使用Write()方法,將字串內容寫入文字檔案。Write()方法的參數是寫入字串,但不含換行符號,如下所示: StreamWriter sw = fileInfo.CreateText(); sw.Write("ASP.NET 2.0"); sw.Write("網頁設計範例教本" + "\r\n"); sw.Write("PHP 5網頁設計範例教本" + "\r\n"); sw.Write("JavaScript網頁製作徹底研究"); 上述程式碼寫入字串到StreamWriter串流物件sw,因為Write()方法並不會換行,所以在後面加上"\r\n"逸出字元的字串來新增換行符號。

12-3-3 寫入換行資料到文字檔案 StreamWrite串流物件的WriteLine()方法可以寫入含換行的字串,如下所示: sw.WriteLine("ASP.NET 2.0網頁設計範例教本"); sw.WriteLine("ASP 3.0網頁設計範例教本"); sw.WriteLine("PHP 5網頁設計範例教本"); sw.WriteLine("JavaScript網頁製作徹底研究");

12-3-4 新增文字到文字檔案 在第12-3-2節和第12-3-3節寫入檔案前都會清除檔案內容,如同建立全新文字檔案。如果我們準備將資料新增到目前存在檔案的檔尾,如下所示: StreamWriter sw = fileInfo.AppendText(); 上述程式碼使用FileInfo物件的AppendText()方法來開啟文字檔案,如此,當使用Write()或WriteLine()方法寫入資料時,就是新增至檔尾。

12-4 文字檔案的讀取 12-4-1 讀取檔案的下一個字元 12-4-2 讀取文字檔的一整行 12-4-3 讀取整個文字檔案(一) 12-4-4 讀取整個文字檔案(二)

12-4-1 讀取檔案的下一個字元-1 文字檔案的讀取可以選擇一列一列讀取或一字一字讀取。首先以一字一字為單位來讀取檔案,ASP.NET程式可以使用StreamReader串流物件來開啟唯讀文字檔案,如下所示: StreamReader sr = new StreamReader(path); 上述程式碼的建構子參數path是檔案實際路徑,開啟的是唯讀串流,內含檔案指標指向讀取位置。目前檔案指標是指向檔案開頭,接著讀取字元,如下所示: ch = sr.Read();

12-4-1 讀取檔案的下一個字元-2 當再次呼叫Read()方法時,就是從目前檔案指標位置開始,讀取下一個字元。換句話說,讀取多個字元可以使用for迴圈配合Read()方法來讀取,如下所示: for (i = 1; i <= 12; i++) { ch = sr.Read(); Response.Write((char)(ch) + " "); } 上述迴圈呼叫12次Read()方法來讀取12個字元或中文字,並且使用型態轉換將內碼值轉換成字元來顯示。

12-4-1 讀取檔案的下一個字元-3 檔案指標移動的圖例,如下圖所示:

12-4-2 讀取文字檔的一整行-說明 StreamReader串流物件提供方法可以一行一行讀取文字檔案內容,如下所示: str = sr.ReadLine(); 上述ReadLine()方法能夠讀取整行文字內容,換行符號為Chr(10) 。

12-4-2 讀取文字檔的一整行-圖例 檔案指標一次移動一行,如下圖所示:

12-4-3 讀取整個文字檔案(一) StreamReader串流物件提供方法可以讀取整個文字檔案內容,如下所示: str = sr.ReadToEnd(); 上述ReadToEnd()方法能夠從目前檔案位置讀取到檔尾的全部內容。如果是剛開啟的檔案,就是讀取整個檔案的內容。

12-4-4 讀取整個文字檔案(二) ReadToEnd()方法可以讀取整個文字檔案內容,換一個方式,我們可以使用ReadLine()方法配合do/while迴圈來讀取整個文字檔案內容,如下所示: do { textLine = sr.ReadLine(); count += 1; Response.Write(count + ": " + textLine + "<br/>"); } while ( ! (sr.Peek() == -1));

範例(本範例開檔會有錯誤, 請於作業中更正) protected void Page_Load(object sender, EventArgs e) { Button2.Enabled = false; } protected void Button1_Click(object sender, EventArgs e) string path = Server.MapPath(TextBox1.Text); FileInfo file = new FileInfo(path); //檔案是否已存在在此時已確定 if (file.Exists) Response.Write("檔案已存在"); StreamReader sr = new StreamReader(path); TextBox2.Text = sr.ReadToEnd(); sr.Close(); else Button2.Enabled = true; Response.Write("新增檔案"); protected void Button2_Click(object sender, EventArgs e) StreamWriter sw = new StreamWriter(path); sw.Write(TextBox2.Text); sw.Flush(); sw.Close();

12-5 二進位檔案的處理-開啟 System.IO名稱空間的類別是將檔案視為串流來處理,不論文字或二進位檔案都可以處理。二進位檔案是使用FileStream串流類別。 以網頁設計來說,二進位檔案處理主要是處理網頁的圖片檔案。在ASP.NET程式可以建立FileStream類別的串流物件來開啟圖片檔案,如下所示: FileStream objStream = new FileStream(path, FileMode.Open); 上述程式碼是使用File類別方法Open()開啟FileStream串流。

12-5 二進位檔案的處理-建立緩衝區 在開啟二進位檔案的FileStream串流後,因為內容是二進位資料,所以無法使用字串變數來讀取,我們是使用byte資料型態陣列的緩衝區來讀取,如下所示: byte[] imgBuf = new byte[objStream.Length + 1]; 上述程式碼宣告長度為檔案串流尺寸的緩衝區。

12-5 二進位檔案的處理-讀取 接著使用for迴圈配合ReadByte()方法來讀取檔案內容,如下所示: for (int i = 0; i < objStream.Length; i++) { imgBuf[i] = (byte) objStream.ReadByte(); } 上述for迴圈共執行串流長度的次數,每一次讀取一個byte來存入緩衝區陣列imgBuf[]。

輸出二進位檔範例(非使用html) protected void Button3_Click(object sender, EventArgs e) { string path = Server.MapPath("Sunset.jpg"); FileStream pic = new FileStream(path, FileMode.Open); byte[] buf = new byte[pic.Length + 1]; for (int i = 0; i < pic.Length; i++) buf[i] = (byte)pic.ReadByte(); } pic.Close(); Response.BinaryWrite(buf);