国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

C# FileStream文件讀寫詳解

2020-01-24 01:11:05
字體:
供稿:網(wǎng)友

FileStream對象表示在磁盤或網(wǎng)絡(luò)路徑上指向文件的流。這個類提供了在文件中讀寫字節(jié)的方法,但經(jīng)常使用StreamReader或StreamWriter執(zhí)行這些功能。這是因為FileStream類操作的是字節(jié)和字節(jié)數(shù)組,而Stream類操作的是字符數(shù)據(jù)。字符數(shù)據(jù)易于使用,但是有些操作,比如隨機文件訪問(訪問文件中間某點的數(shù)據(jù)),就必須由FileStream對象執(zhí)行,稍后對此進行介紹。

還有幾種方法可以創(chuàng)建FileStream對象。構(gòu)造函數(shù)具有許多不同的重載版本,最簡單的構(gòu)造函數(shù)僅僅帶有兩個參數(shù),即文件名和FileMode枚舉值。

復(fù)制代碼 代碼如下:

FileStream aFile = new FileStream(filename, FileMode.Member);

FileMode枚舉有幾個成員,規(guī)定了如何打開或創(chuàng)建文件。稍后介紹這些枚舉成員。另一個常用的構(gòu)造函數(shù)如下:

復(fù)制代碼 代碼如下:

FileStream aFile = new FileStream(filename, FileMode.Member, FileAccess. Member);

第三個參數(shù)是FileAccess枚舉的一個成員,它指定了流的作用。FileAccess枚舉的成員如表22-6所示。

表  22-6

成員 說明
Read 打開文件,用于只讀
Write 打開文件,用于只寫
ReadWrite 打開文件,用于讀寫

對文件進行不是FileAccess枚舉成員指定的操作會導(dǎo)致拋出異常。此屬性的作用是,基于用戶的身份驗證級別改變用戶對文件的訪問權(quán)限。

在FileStream構(gòu)造函數(shù)不使用FileAccess枚舉參數(shù)的版本中,使用默認(rèn)值FileAccess. ReadWrite。

FileMode枚舉成員如表22-7所示。使用每個值會發(fā)生什么,取決于指定的文件名是否表示已有的文件。注意這個表中的項表示創(chuàng)建流時該流指向文件中的位置,下一節(jié)將詳細(xì)討論這個主題。除非特別說明,否則流就指向文件的開頭。

表  22-7

成員 文件存在 文件不存在
Append 打開文件,流指向文件的末尾,只能與枚舉FileAccess.Write聯(lián)合使用 創(chuàng)建一個新文件。只能與枚舉FileAccess.Write聯(lián)合使用
Create 刪除該文件,然后創(chuàng)建新文件 創(chuàng)建新文件
CreateNew 拋出異常 創(chuàng)建新文件
Open 打開現(xiàn)有的文件,流指向文件的開頭 拋出異常
OpenOrCreate 打開文件,流指向文件的開頭 創(chuàng)建新文件
Truncate 打開現(xiàn)有文件,清除其內(nèi)容。流指向文件的開頭,保留文件的初始創(chuàng)建日期 拋出異常

File和FileInfo類都提供了OpenRead()和OpenWrite()方法,更易于創(chuàng)建FileStream對象。前者打開了只讀訪問的文件,后者只允許寫入文件。這些都提供了快捷方式,因此不必以FileStream構(gòu)造函數(shù)的參數(shù)形式提供前面所有的信息。例如,下面的代碼行打開了用于只讀訪問的Data.txt文件:

復(fù)制代碼 代碼如下:

FileStream aFile = File.OpenRead("Data.txt");

注意下面的代碼執(zhí)行同樣的功能:

復(fù)制代碼 代碼如下:

FileInfo aFileInfo = new FileInfo("Data.txt");
FileStream aFile = aFile.OpenRead();

1. 文件位置

FileStream類維護內(nèi)部文件指針,該指針指向文件中進行下一次讀寫操作的位置。在大多數(shù)情況下,當(dāng)打開文件時,它就指向文件的開始位置,但是此指針可以修改。這允許應(yīng)用程序在文件的任何位置讀寫,隨機訪問文件,或直接跳到文件的特定位置上。當(dāng)處理大型文件時,這非常省時,因為馬上可以定位到正確的位置。

實現(xiàn)此功能的方法是Seek()方法,它有兩個參數(shù):第一個參數(shù)規(guī)定文件指針以字節(jié)為單位的移動距離。第二個參數(shù)規(guī)定開始計算的起始位置,用SeekOrigin枚舉的一個值表示。Seek Origin枚舉包含3個值:Begin、Current和End。

例如,下面的代碼行將文件指針移動到文件的第8個字節(jié),其起始位置就是文件的第1個字節(jié):

復(fù)制代碼 代碼如下:

aFile.Seek(8,SeekOrigin.Begin);

下面的代碼行將指針從當(dāng)前位置開始向前移動2個字節(jié)。如果在上面的代碼行之后執(zhí)行下面的代碼,文件指針就指向文件的第10個字節(jié):

復(fù)制代碼 代碼如下:

aFile.Seek(2,SeekOrigin.Current);

注意讀寫文件時,文件指針也會改變。在讀取了10個字節(jié)之后,文件指針就指向被讀取的第10個字節(jié)之后的字節(jié)。

也可以規(guī)定負(fù)查找位置,這可以與SeekOrigin.End枚舉值一起使用,查找靠近文件末端的位置。下面的代碼會查找文件中倒數(shù)第5個字節(jié):

復(fù)制代碼 代碼如下:

aFile.Seek( 主站蜘蛛池模板: 麻栗坡县| 麟游县| 平果县| 蒙阴县| 清流县| 达孜县| 邛崃市| 景谷| 太仆寺旗| 普定县| 巍山| 平山县| 麦盖提县| 峡江县| 林口县| 贵南县| 封开县| 城口县| 绥阳县| 宁城县| 武城县| 子洲县| 东辽县| 酒泉市| 衡阳市| 高阳县| 达尔| 黄平县| 宁明县| 竹山县| 奉新县| 石屏县| 开阳县| 商河县| 神木县| 上虞市| 庆云县| 广德县| 台州市| 黄石市| 益阳市|