版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
第十二章C#中的文件處理
2多數(shù)編程語言都提供數(shù)組這種數(shù)據(jù)結構,用以存儲屬于相同類型的多個數(shù)據(jù)元素可以使用Array類的CreateInstance方法來創(chuàng)建Array對象,也可以直接定義數(shù)組對象集合可用于管理在運行時動態(tài)創(chuàng)建的元素項System.Collections命名空間提供一組接口和類,讓用戶可以對一組數(shù)據(jù)元素執(zhí)行各種集合操作用戶可以通過HashTable類將數(shù)據(jù)、鍵值作為一組來存儲,這些數(shù)據(jù)是根據(jù)鍵值進行組織的Array類屬于System命名空間,而ArrayList類屬于System.Collections命名空間ArrayList在Array的基礎上提供了動態(tài)的特性回顧3目標了解System.IO命名空間掌握讀寫文本文件的方法掌握向文件讀寫二進制數(shù)據(jù)的方法掌握讀寫內(nèi)存流的方法4System.IO命名空間4-1另存為.xls文件另存為.bmp文件另存為.txt文件以字節(jié)形式向磁盤寫數(shù)據(jù)通常稱為字節(jié)流。存儲在磁盤上的字節(jié)集合稱為文件5System.IO命名空間4-1IO命名空間包含便于在數(shù)據(jù)流和文件中讀取和寫入數(shù)據(jù)的類類名功能和用途Directory、File、DirectoryInfo以及FileInfo創(chuàng)建、刪除并移動目錄和文件,通過屬性獲取特定目錄和文件的相關信息Stream所有流的抽象基類。流是字節(jié)序列的抽象概念StreamReader、StreamWriter讀寫文本數(shù)據(jù)信息BinaryReader、BinaryWriter讀寫二進制數(shù)據(jù)6System.IO命名空間4-2File對象靜態(tài)方法MoveDeleteCopyExistsGetAttributesGetCreateTime……7System.IO命名空間4-3試一試:把C:\WinNT\Win.INI文件拷貝到C:\下的代碼,怎么寫?8System.IO命名空間4-4FileInfo類和File類兩者都提供對文件類似的操作FileInfo不是靜態(tài)對象FileInfo提供了實例成員,因此不是線程安全的,不會因為安全檢查而降低效率9讀寫文本文件3-1System.IO命名空間繼承類
靜態(tài)方法Create(stringFilePath)Open(stringFilePath,FileMode)OpenRead(stringFilePath)OpenWrite(stringFilePath)CreateText(stringFilePath)OpenText(stringFilePath)AppendText(stringFilePath)FileStream類File類10讀寫文本文件3-2FileStream構造函數(shù)FileStream已重寫構造函數(shù)FileStream(stringFilePath,FileMode)FileStream(stringFilePath,FileMode,FileAccess)FileStream(stringFilePath,FileMode,FileAccess,FileShare)在構造函數(shù)中使用的FileMode、FileAccess和FileShare參數(shù)都是enum類型
11FileMode和FileShareFileModeAppendCreateCreateNewOpenOpenOrCreateTruncateFileAccessReadWriteReadWriteFileShareNoneReadWriteReadWrite…………FileStreamfstream=newFileStream("Test.cs",FileMode.OpenOrCreate,FileAccess.ReadWrite,FileShare.None);………12文件讀寫例子4-113文件讀寫例子 FileStreamfs; try { fs=File.Create(txtFileName.Text); } catch { MessageBox.Show("建立文件時出錯。","錯誤", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Warning); return; }
byte[]content=new UTF8Encoding(true).GetBytes(txtContent.Text); try { fs.Write(content,0,content.Length); fs.Flush(); MessageBox.Show("保存成功","保存", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Information); } catch { MessageBox.Show("寫入文件時出錯。","錯誤", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Warning); } finally {
fs.Close(); } }創(chuàng)建文件將轉換后的Byte數(shù)組寫入新建的文本文件14文件讀寫例子4-3classFileReadDemo{ publicstaticvoidMain() { stringpath; Console.WriteLine( "輸入要讀取的文件名。指定帶路徑的完整名稱:"); path=Console.ReadLine(); try { if(!File.Exists(path)) { Console.WriteLine("文件不存在"); } else { //打開流以進行讀取。
FileStreamfs=File.OpenRead(path);
檢查文件是否存在打開文件流15文件讀寫例子4-4 //創(chuàng)建一個byte數(shù)組以讀取數(shù)據(jù) byte[]arr=newbyte[100]; UTF8Encodingdata=newUTF8Encoding(true); //繼續(xù)讀文件直到讀取文件中的所有數(shù)據(jù) while(fs.Read(arr,0,arr.Length)>0) { Console.WriteLine(data.GetString(arr)); } }} catch(Exceptionex) { Console.WriteLine(“發(fā)生錯誤:"+ex.Message); }}}FileStream.Read()用于從指定文件讀取數(shù)據(jù)16讀寫字節(jié)流文件要使用StreamReader和StreamWriter類StreamReader從字節(jié)流中讀取字符,使用指定的編碼FileStreamfilestream=newFileStream(Filename,FileMode.Create);StreamReaderobjStreamReader=newStreamReader(filestream,Encoding.Default);17字節(jié)流文件讀寫對象Close()Read()ReadLine()ReadToEnd()Close()Flush()Write()WriteLine()StreamReaderStreamWriter18讀寫二進制文件要使用BinaryReader和BinaryWriter類這兩個對象都需要在Stream上創(chuàng)建FileStreamfilestream=newFileStream(Filename,FileMode.Create);BinaryWriterobjBinaryWriter=newBinaryWriter(filestream);19二進制文件讀寫對象Close()Read()ReadDecimal()ReadByte()ReadInt16()ReadInt32()ReadString()Close()Flush()Write()BinaryReaderBinaryWriter20寫二進制文件
publicstaticvoidMain(String[]args){
Console.WriteLine("輸入文件名:");
stringFilename=Console.ReadLine();
FileStreamfilestream=newFileStream(Filename,FileMode.Create);
BinaryWriterobjBinaryWriter=newBinaryWriter(filestream);
for(intindex=0;index<20;index++) {
objBinaryWriter.Write((int)index); }
Console.WriteLine("\二進制數(shù)據(jù)已寫入文件");
objBinaryWriter.Close();
filestream.Close();}創(chuàng)建FileStream實例創(chuàng)建BinaryWriter實例關閉FileStream和BinaryWriter寫數(shù)據(jù)21讀二進制文件publicstaticvoidMain(String[]args){ Console.WriteLine("輸入文件名:"); stringfile=Console.ReadLine(); if(!File.Exists(file))
{ Console.WriteLine("文件不存在!");
} else
{
FileStreamfilestream=newFileStream(file, FileMode.Open,FileAccess.Read);
BinaryReaderobjBinaryReader=new BinaryReader(filestream); try
{ while(true)
{
Console.WriteLine(objBinaryReader.ReadInt32());
}
} catch(EndOfStreamExceptioneof)
{
Console.WriteLine(“已到文件末尾");
}
}}FileStream和BinaryReader的實例讀信息22Stream類是派生出各種類的抽象類其中的一些派生類包括FileStreamMemoryStreamBufferedStreamNetworkStreamCryptoStream23讀寫內(nèi)存流抽象類MemoryStreamBufferedStream對內(nèi)存而不是對磁盤進行數(shù)據(jù)讀寫減少了對臨時緩沖區(qū)和文件的需要
對緩沖區(qū)進行數(shù)據(jù)讀寫允許操作系統(tǒng)創(chuàng)建自己的緩沖區(qū)輸入/輸出效率高且速度更快在網(wǎng)絡通訊的時候經(jīng)常會使用到Stream類24BufferedStream構造函數(shù)publicBufferedStream(StreamStName);publicBufferedStream(StreamStName,intbsize);默認緩沖區(qū)大小為4096緩沖區(qū)大小25通過緩沖區(qū)交換數(shù)據(jù)2-1publicstaticvoidMain(){
Console.WriteLine(“請輸入文件名:");
stringname=Console.ReadLine();
Console.WriteLine(“請輸入備份文件名:");
stringbackup=Console.ReadLine();
if(File.Exists(name)) {
StreaminputStream=File.OpenRead(name);
StreamoutputStream=File.OpenWrite(backup);
BufferedStreambufferedInput=new BufferedStream(inputStream);
BufferedStreambufferedOutput=new BufferedStream(outputStream);Stream和BufferedStream的實例26通過緩沖區(qū)交換數(shù)據(jù)2-2 byte[]buffer=newByte[sizeBuff];
intbytesRead;
while((bytesRead=
bufferedInput.Read(buffer,0,sizeBuff))>0) {
bufferedOutput.Write(buffer,0,bytesRead); }
Console.WriteLine();
Console.WriteLine("給定備份的文件已創(chuàng)建");
bufferedOutput.Flush();
bufferedInput.Close();
bufferedOutput.Close();
}else
{
Console.WriteLine("文件不存在");
}}通過緩沖區(qū)進行讀寫刷新并關閉BufferStream27BufferedStream類classBufStream{staticvoidMain(string[]args){ MemoryStreammemstr=newMemoryStream(); BufferedStreambuffstr=newBufferedStream(memstr);
buffstr.WriteByte((byte)100); buffstr.Position=0; byte[]arrb={1,2,3}; buffstr.Read(arrb,0,1); for(inti=0;i<3;i++) { Console.WriteLine("val{0}",arrb[i]); } Console.WriteLine("ReadByte()的返回值為{0}",buffstr.ReadByte());}}28示例應用程序2-1學生詳細信息用戶界面學生文件存儲信息用戶界面//聲明變量privateFileStreamfstream;publicfrmStudentEntry()//Constructor構造函數(shù){
InitializeComponent();
fstream=File.Create("C:\\Student.txt");}privatevoidbtnSave_Click(objectsender,System.EventArgse){//準備將文本寫入文件stringdata;data=txtFirstName.Text+""+txtLastName.Text+""+txtClass.Text;
data+=""+txtGrade.Text+"\n";Byte[]info=new
UTF8Encoding(true).GetBytes(data);//寫數(shù)據(jù)fstream.Write(info,0,info.Length);//刷新并關閉FileStreamfstream.Flush();fstream.Close();frmStudentFileobjfrmStudentFile=newfrmStudentFile();objfrmStudentFile.Show();}將數(shù)據(jù)寫入文本文件刷新并關閉FileStream29示例應用程序2-2privatevoidfrmStudentFile_Load(objectsender,System.
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 河南師范大學《儀器分析》2022-2023學年第一學期期末試卷
- 七年級上冊默寫篇目-2024年中考(解析版)
- 河南師范大學《數(shù)學軟件與》2022-2023學年第一學期期末試卷
- 河南師范大學《健康教育學》2021-2022學年第一學期期末試卷
- 河南科技大學《軸承測試技術》2021-2022學年第一學期期末試卷
- 河南科技大學《藥物合成反應》2021-2022學年第一學期期末試卷
- 河南科技大學《高等代數(shù)》2023-2024學年第一學期期末試卷
- 黑龍江省綏化市肇東市2024-2025學年九年級上學期期中物理試卷
- 河北地質大學《統(tǒng)計模型》2022-2023學年第一學期期末試卷
- 河北地質大學《人力資源管理學》2023-2024學年第一學期期末試卷
- 中國心力衰竭診斷和治療指南2024十大要點解讀
- 勞動合同書中英文LaborContract
- 《保險科技》課件-第四章 區(qū)塊鏈及其在保險中的應用
- 第一單元(單元測試)-2024-2025學年三年級上冊道德與法治 統(tǒng)編版
- 2024年全國職業(yè)院校技能大賽高職組(化工生產(chǎn)技術賽項)備賽試題庫500題(含答案)
- 醫(yī)院醫(yī)療安全(不良事件)分析整改記錄表
- 2024年湖南省七五普法讀本考試題庫及答案(一)
- 公安基礎知識輔警考試1000題
- 2023年反假貨幣考試試題題庫(含答案)
- 充分發(fā)揮市場在資源配置中的決定性作用教學設計-高中政治必修二經(jīng)濟與社會
- 2024年部編版新教材語文小學一年級上冊期中考試檢測題附答案(共2套)
評論
0/150
提交評論