



版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
C#讀寫文件總結(jié)-)文件目錄操作函數(shù)和示例首先要熟悉.NET中處理文件和文件夾的操作。File類和Directory類是其中最主要的兩個類。了解它們將對后面功能的實現(xiàn)提供很大的便利。本節(jié)先對和文件系統(tǒng)相關(guān)的兩個.NET類進行簡要介紹。System.IO.File類和System.lO.Filelnfo類主要提供有關(guān)文件的各種操作,在使用時需要引用System.lO命名空間。下面通過程序?qū)嵗齺斫榻B其主要屬性和方法。(1)文件打開方法:File.Open()該方法的聲明如下:publicstaticFileStreamOpen(stringpath.FileModemode)下面的代碼打開存放在c:\tempuploads口錄下名稱為newFile.txt文件,并在該文件屮寫入hellOoprivatevoidOpenFile(){FileStream.TextFile=File.Open(@"c:\tempuploads\newFile.txt",FileMode.Append);byte〇Info={(byte)"h',(byte)'e",(byte)T,(byte)T,(byteyo1);TextFile.Write(lnfo,0,Info.Length);TextFile.Close();)(2)文件創(chuàng)建方法:File.Create()該方法的聲明如下:publicstaticFileStreamCreate(stringpath;)下面的代碼演示如何在c:\tempuploadsド創(chuàng)建名為newFile.txt的文件。山于File.Create方法默認(rèn)向所有用戶授予對新文件的完全讀/寫訪問權(quán)限,所以文件是用讀/寫訪問權(quán)限打開的,必須關(guān)閉后才能由其他應(yīng)用程序打開。為此,所以需要使用FileStream類的Close方法將所創(chuàng)建的文件關(guān)閉。FileStreamNewText=File.Create(@“c:\tempuploads\newFile.txt");NewText.Close();)(3)文件刪除方法:File.Delete()該方法聲明如下:publicstaticvoidDelete(stringpath);下面的代碼演示如何刪除c:\tempuploads目錄下的newFile.txt文件。privatevoidDeleteFile()(File.Delete(@Mc:\tempuploads\newFile.txtM);)(4)文件復(fù)制方法:File.Copy該方法聲明如下:publicstaticvoidCopy(stringsourceFileName,stringdestFileName.booloverwrite);下面的代碼將c:\tempuploads\newFile.txt復(fù)制到c:\tempuploads\BackUp.txt。由于C叩e方法的OverWrite參數(shù)設(shè)為true?所以如果BackUp.txt文件已存在的話,將會被復(fù)制過去的文件所覆蓋。privatevoidCopyFile()(File.Copy(@,,c:\tempuploads\newFile.txt",@,"c:\tempuploads\BackUp.txt",true);)(5)文件移動方法:File.Move該方法聲明如下:publicstaticvoidMove(stringsourceFileName,stringdestFileName);卜.面的代碼可以將c:\tempuploads下的BackUp.txt文件移動到c盤根目錄下。注意:只能在同一個邏輯盤下進行文件轉(zhuǎn)移。如果試圖將C盤下的文件轉(zhuǎn)移到d盤,將發(fā)生錯誤。privatevoidMoveFile()|File.Move(@',c:\tempuploads\BackUp.txt,,,@',c:\BackUp.txt,');)(6)設(shè)置文件屬性方法:File.SetAttributes該方法聲明如下:publicstaticvoidSetAttributes(stringpath.FileAttributesfileAttributes);下面的代碼可以設(shè)置文件c:\tempuploads\newFile.txt的屬性為只讀、隱藏。privatevoidSetFile()(File.SetAttributes(@,,c:\tempuploads\newFile.txt,',FileAttributes.ReadOnly|FileAttributes.Hidden);)文件除了常用的只讀和隱藏屬性外,還有Archive(文件存檔狀態(tài)),System(系統(tǒng)文件),Temporary(臨時文件)等。關(guān)于文件屬性的詳細(xì)情況請參看MSDN中FileAttributes的描述。(7)判斷文件是否存在的方法:File.Exist該方法聲.明如F:publicstaticboolExists(stringpath);下面的代碼判斷是否存在c:\tempuploads\newFile.txt文件。若存在,先復(fù)制該文件,然后其刪除,最后將復(fù)制的文件移動;若不存在,則先創(chuàng)建該文件,然后打開該文件并進行寫入操作,最后將文件屬性設(shè)為只讀、隱藏。if(File.Exists(@"c:\tempuploads\newFile.txt"))//判斷文件是否存在(CopyFile();//復(fù)制文件DeはeFile();//刪除文件MoveFile();〃移動文件else|MakeFile();//生成文件OpenFile();//打開文件SetFile();〃設(shè)置文件屬性)此外,File類對于Text文本提供了更多的支持。AppendText:將文本追加到現(xiàn)有文件CreateText:為寫入文本創(chuàng)建或打開新文件OpenText:打開現(xiàn)有文本文件以進行讀取但上述方法主要對UTF-8的編碼文本進行操作,從而顯得不夠靈活。在這里推薦讀者使用下面的代碼對txt文件進行操作。對txt文件進行“讀”操作,示例代碼如下:StreamReaderTxtReader=newStreamReader(@,'c:\tempuploads\newFile.txt,,,System.Text.Encoding.Default);stringFileContent;FileContent=TxtReader.ReadEnd();TxtReader.Close();對txt文件進行“寫”操作,示例代碼如下:StreamWriter=newStreamWrite(@Hc:\tempuploads\newFile.txtn,System.Text.Encoding.Default);stringFileContent;TxtWriter.Write(FileContent);TxtWriter.Close();System.10.Directory類和System.DirectoryInfo類主要提供關(guān)于目錄的各種操作,使用時需要引用System」。命名空間。下面通過程序?qū)嵗齺斫榻B其主要屬性和方法。(1)目錄創(chuàng)建方法:Directory.CreateDirectory該方法聲明如下:publicstaticDirectoryinfoCreateDirectory(stringpath);下面的代碼演示在c:\tempuploads文件夾下創(chuàng)建名為NewDirectory的冃錄。privatevoidMakeDirectory()(Directory.CreateDirectory(@,'c:\tempuploads\NewDirectotyH);)(2)目錄屬性設(shè)置方法:Directorylnfo.Atttributesド面的代碼設(shè)置c:\tempuploads\NewDirectory目錄為只讀、隱藏。與文件屬性相同,目錄屬性也是使用FileAttributes來進行設(shè)置的。privatevoidSetDirectory()(DirectoryinfoNewDirlnfo=newDirectorylnfo(@wc:\tempuploads\NewDirectotyM);NewDirlnfo.Atttributes=FileAttributes.ReadOnly|FileAttributes.Hidden;}(3)目錄刪除方法:Directory.Delete該方法聲明如ド:publicstaticvoidDelete(stringpath,boolrecursive);下面的代碼可以將c:\tempuploads\BackUp目錄刪除。Delete方法的第二個參數(shù)為bool類型,它可以決定是否刪除非空目錄。如果該參數(shù)值為true,將刪除整個目錄,即使該目錄下有文件或子目錄;若為false,則僅當(dāng)目錄為空時オ可刪除。privatevoidDeleteDirectory()Directory.Delete(@',c:\tempuploads\BackUp",true);)(4)目錄移動方法:Directory.Move該方法聲明如下:publicstaticvoidMove(stringsourceDirName,stringdestDirName);下面的代碼將H錄c:\tempuploads\NewDirectory移動至リc:\tempuploads\BackUp〇privatevoidMoveDirectory()(File.Move(@',c:\tempuploads\NewDirectory,,,@,,c:\tempuploads\BackUpH);)(5)獲取當(dāng)前目錄下的所有子目錄方法:Directory.GetDirectories該方法聲明如下:publicstaticstringQGetDirectories(stringpath;);下面的代碼讀出c:\tempuploads、目錄下的所有子目錄,并將其存儲到字符串?dāng)?shù)組中。privatevoidGetDirectory()(stringロDirectorys;Directorys=Directory.GetDirectories(@Hc:\tempuploadsM);}(6)獲取當(dāng)前目錄下的所有文件方法:Directory.GetFiles該方法聲明如下:publicstaticstringf]GetFiles(stringpath;);下面的代碼讀出c:\tempuploads'目錄下的所有文件,并將其存儲到字符串?dāng)?shù)組中。stringロFiles;Files=Directory.GetFiles(@Hc:\tempuploadsH,);}(7)判斷目錄是否存在方法:Directory.Exist該方法聲明如下:publicstaticboolExists(stringpath);下面的代碼判斷是否存在c:\tempuploads\NewDirectoryH錄。若存在,先獲取該目錄下的子目錄和文件,然后其移動,最后將移動后的目錄刪除。若不存在,則先創(chuàng)建該目錄,然后將目錄屬性設(shè)為只讀、隱藏if(File.Exists(@"c:\tempuploads\NewDirectory"))〃判斷目錄是否存在(GetDirectory。;//獲取子目錄GetFile。;//獲取文件MoveDirectory。;//移動目錄DeleteDirectory。;〃刪除目錄)else(MakeDirectory。;〃生成目錄SetDirectory();〃設(shè)置目錄屬性}注意:路徑有3種方式,當(dāng)前目錄下的相對路徑、當(dāng)前工作盤的相對路徑、絕對路徑。以C:\Tmp\Book為例(假定當(dāng)前工作目錄為C:\Tmp)?!癇ook”,“\Tmp\Book”,"C:\Tmp\Book”都表示C:\Tmp\Booko另外,在C#中“V是特殊字符,要表示它的話需要使用、”。山于這種寫法不方便,C#語言提供了@對其筒化。只要在字符串前加上@即可直接使用へ。所以上面的路徑在C#中應(yīng)該表示為“Book”,@“\Tmp\Book",@"C:\Tmp\Book”。-)文件讀寫具體方法1、使用FileStream讀寫文件文件頭:usingSystem;usingSystem.Collections.Generic;usingSystem.Text;usingSystem.IO;讀文件核心代碼:byte[]byData=newbyte[100];char[]charData=newchar[1000];try(FileStreamsFile=newFileStream("文件路徑”,FileMode.Open);sFile.Seek(55,SeekOrigin.Begin);sFile.Read(byData,0,100);〃第一個參數(shù)是被傳進來的字節(jié)數(shù)組,用以接受FileStream對象中的數(shù)據(jù),第2個參數(shù)是字節(jié)數(shù)組中開始寫入數(shù)據(jù)的位置,它通常是。,表示從數(shù)組的開端文件中向數(shù)組寫數(shù)據(jù),最后一個參數(shù)規(guī)定從文件讀多少字符,)catch(lOExceptione)Console.WriteLine(HAnIOexceptionhasbeenthrown!'*);Console.WriteLine(e.ToStringO);Console.ReadLine();return;)Decoderd=Encoding.UTF8.GetDecoder();d.GetChars(byData,0,byData.Length,charData,0);Console.WriteLine(charData);Console.ReadLine();寫文件核心代碼:FileStreamfs=newFileStream(文件路徑,FileMode.Create);〃獲得字節(jié)數(shù)組byte口data=newUTF8Encoding().GetBytes(String);〃開始寫入fs.Write(data,O,data.Length);〃清空緩沖區(qū)、關(guān)閉流fs.Flush();fs.Close();2、使用StreamReader和StreamWriter文件頭:usingSystem;usingSystem.Collections.Generic;usingSystem.Text;usingSystem.IO;StreamReader讀取文件:StreamReaderobjReader=newStreamReader(文件路徑);stringsLine=M";ArrayListLineList=newArrayList();while(sLine!=null){sLine=objReader.ReadLine();if(sLine!=null&&!sLine.Equals(,m))LineList.Add(sLine);}objReader.Close();returnLineList;StreamWriter寫文件:FileStreamfs=newFileStream(文件路徑,FileMode.Create);StreamWritersw=newStreamWriter(fs);〃開始寫入sw.Write(String);〃清空緩沖區(qū)sw.Flush();〃關(guān)閉流sw.Close();fs.Close();方式ー:用FileStream〃實例化一個保存文件對話框SaveFileDialogsf=newSaveFileDialog();〃設(shè)置文件保存類型sf.Filter="txt文件 所有文件|*.件〃如果用戶沒有輸入擴展名,自動追加后綴sf.AddExtension=true;〃設(shè)置標(biāo)題sf.Title="寫文件";〃如果用戶點擊了保存按鈕if(sf.ShowDialog()==DialogResult.OK)(〃實例化ー個文件流-一》與寫入文件相關(guān)聯(lián)FileStreamfs=newFileStream(sf.FileName,FileMode.Create);〃獲得字節(jié)數(shù)組byte[]data=newUTF8Encoding().GetBytes(this.textBox1.Text);〃開始寫入fs.Write(data,O,data.Length);〃清空緩沖區(qū)、關(guān)閉流fs.Flush();fs.Close();)方式二:用StreamWriter〃實例化一個保存文件對話框SaveFileDialogsf=newSaveFileDialog();〃設(shè)置文件保存類型sf.Filter="txt文件|*.txt|所有文件〃如果用戶沒有輸入擴展名,自動追加后綴sf.AddExtension=true;〃設(shè)置標(biāo)題sf.Title="寫文件";〃如果用戶點擊了保存按鈕if(sf.ShowDialog()==DialogResult.OK)(〃實例化ー個文件流-一〉與寫入文件相關(guān)聯(lián)FileStreamfs=newFileStream(sf.FileName,FileMode.Create);〃實例化ー個StreamWHter-->與fs相關(guān)聯(lián)StreamWritersw=newStreamWriter(fs);〃開始寫入sw.Write(this.textBox1.Text);〃淸空緩沖區(qū)sw.Flush();〃關(guān)閉流sw.Close();fs.Close();}stringFileName=Guid.NewGuid().ToString()+M.txtM;//GUID生成唯一文件名StringBuilderckpw=newStringBuilder(ヤ憑證輸出ヾ,W800ヤ,V'001,,ぐ東風(fēng)隨州專用汽車有限公司V:+ヤF89自由項16ヾハ”F90審核日期:ヾう;if(!FilelO.lsFolderExists(Server.MapPath(MpzscM)))FilelO.CreaterFolder(Server.MapPathC,M),Mfile://pzsc/M);stringfilePath=Server.MapPath(',pzscH)+”\\"+FileName;System.10.StreamWritersw=newSystem.10.StreamWriter(filePath,false,Encoding.GetEncoding(”GB2312"));〃創(chuàng)建的時候需要指定編碼格式,默認(rèn)是UTF-8,中文顯示亂碼sw.WriteLine(ckpw.ToString());sw.Close();方式三:用BinaryWriter〃實例化一個保存文件對話框SaveFileDialogsf=newSaveFileDialog();〃設(shè)置文件保存類型sf.Filter="txt文件|*.txt|所有文件『.*";〃如果用戶沒有輸入擴展名,自動追加后綴sf.AddExtension=true;〃設(shè)置標(biāo)題sf.Title="寫文件”;〃如果用戶點擊了保存按鈕if(sf.ShowDialog()==DialogResult.OK)(〃實例化ー個文件流ー一》與寫入文件相關(guān)聯(lián)FileStreamfs=newFileStream(sf.FileName,FileMode.Create);〃實例化BinaryWriterBinaryWriterbw=newBinaryWriter(fs);bw.Write(this.textBox1.Text);〃清空緩沖區(qū)bw.Flush();〃關(guān)閉流bw.Close();fs.Close();}C#緩存流示例一一ー->用緩存流復(fù)制文件C#文件處理操作必須先導(dǎo)入命名空間:usingSystem.10;背景:使用VS2005、ー個按鈕、ー個窗體、C#緩存流、把D:\KuGoo、愛得太多.wma復(fù)制到D:'并更名為love.wma,即:D:\love.wma在按鈕的Click事件中添加如下代碼:privatevoidbutton1_Click(objectsender,EventArgse)(〃創(chuàng)建兩個文件流ー個是源文件相關(guān),另一個是要寫入的文件FileStreamfs=newFileStream(@"D:\KuGoo、愛得太多.wma",FileMode.Open);FileStreamfs2=newFileStream(@"D:\love.wma",FileMode.Create);〃創(chuàng)建一個字節(jié)數(shù)組,作為兩者之間的媒介〃好比兩個人拿蘋果,這個字節(jié)數(shù)組就好比ー個籃子,一個人作死的把蘋果送到籃//子里面,〃而我就可以作死得拿蘋果,通過這個媒介我們互不干擾,〃不需要互相等待【她往籃子里面放了蘋果我オ可以去拿】,提高了效率byte。data=newbyte[1024];〃創(chuàng)建兩個緩沖流,與兩個文件流相關(guān)聯(lián)BufferedStreambs=newBufferedStream(fs);BufferedStreambs2=newBufferedStream(fs2);〃fs作死的讀,fs2作死的寫,直到fs沒有字節(jié)可讀fs2就不寫了〃好比,ー個人作死的往籃子里面丟蘋果,另ー個人作死得往籃子里面拿蘋果,直到〃籃子里面沒有蘋果拿了為止〃即一〉那個人沒有蘋果往籃子里面放了while(fs.Read(data,O,data.Length)>O)(fs2.Write(data,0,data.Length);fs2.Flush();}〃關(guān)閉流,好比兩個人累了,都要休息呵呵。(n_n)〇…fs.Close();fs2.Close();}C#內(nèi)存流示例一一,用內(nèi)存流來讀取圖片C#文件處理操作必須先導(dǎo)入命名空間:usingSystem.10;背景:ー個窗體、?個pictureBox、ー個lable[沒有選擇圖片,lable的text為"圖片未選擇ッ在pictureBoxI的Click事件中添加如下代碼:privatevoidpictureBoxI_Click(objectsender,EventArgse){〃實例化一個打開文件對話框OpenFileDialogop=newOpenFileDialog();〃設(shè)置文件的類型op.Filter="JPG圖片|*.jpg|GIF圖片「gif';〃如果用戶點擊了打開按鈕、選擇了正確的圖片路徑則進行如下操作:if(op.ShowDialog()==DialogResult.OK)(〃清空文本this.labell.Text=*,M;〃實例化一個文件流FileStreamfs=newFileStream(op.FileName,FileMode.Open);〃把文件讀取到字節(jié)數(shù)組byte[]data=newbyte[fs.Length];fs.Read(data,0,data.Length);fs.Close();〃實例化ー個內(nèi)存流ー》把從文件流中讀取的內(nèi)容[字節(jié)數(shù)組]放到內(nèi)存流中去Memorystreamms=newMemoryStream(data);〃設(shè)置圖片框pictureBoxI中的圖片this.pictureBoxI.Image=Image.FromStream(ms);}}三)通常我們讀取ー個文件使用如下的步驟:1、聲明并使用File的OpenRead實例化ー個文件流對象,就像下面這樣2、準(zhǔn)備ー個存放文件內(nèi)容的字節(jié)數(shù)組,fs.Length將得到文件的實際大小,就像下面這樣3、開始讀了,調(diào)用ー個文件流的ー個方法讀取數(shù)據(jù)到data數(shù)組中FileStreamfs=File.OpenRead(filename);或者FileStreamfs=FileStream(filename,FileMode.Open,FileAccess.Read,FileShare.Read);byte[]data=newbyte[fs.Length];fs.Read(data,0,data.Length);下面的方法提供了一個比上面方法更安全的方法,來保證文件被完全讀出publicstaticvoidSafeRead(Streamstream,byte[]data)(intoffset=0;intremaining=data.Length;/Z只要有剩余的字節(jié)就不停的讀while(remaining>0)(intread=stream.Read(data,offset,remaining);if(read<=0)thrownewEndOfStreamException("文件讀取到"+read.ToString()+”失敗!つ;〃減少剩余的字節(jié)數(shù)remaining-=read;//增加偏移量offset+=read;})有些情況下你不知道流實際的長度,比如:網(wǎng)絡(luò)流。此時可以使用類似的方法讀取流直到流里面的數(shù)據(jù)完全讀取出來為止。我們可以先初始化一段緩存,再將流讀出來的流信息寫到內(nèi)存流里面,就像下面這樣:publicstaticbyte[]ReadFully(Streamstream)(/Z初始化ー個32k的緩存byte[]buffer=newbyte[32768];using(MemoryStreamms=newMemoryStreamO)〃返回結(jié)果后會自動回收調(diào)用該對象的Dispose方法釋放內(nèi)存〃不停的讀取while(true){intread=stream.Read(buffer,0,buffer.Length);//直到讀取完最后的3M數(shù)據(jù)就可以返回結(jié)果了if(read<=0)returnms.ToArrayO;ms.Write(buffer,0,read);))I雖然上面的例子都比較簡單,效果也不是很明顯(大部分都是對的),也許你早就會了,沒關(guān)系這篇文章本來就是寫給初學(xué)者的。下面的方法提供了一?種使用指定緩存長度的方式讀取流,雖然在很多情況下你可以直接使用Stream.Length得到流的長度,但是不是所有的流都可以得到。publicstaticbyte[]Read2Buffer(Streamstream,intBufferLen)(//如果指定的無效長度的緩沖區(qū),則指定一個默認(rèn)的長度作為緩存大小if(BufferLen<1)(BufferLen=0x8000;//初始化一個緩存區(qū))byte[]buffer=newbyte[BufferLen];intread=0;intblock;/Z每次從流中讀取緩存大小的數(shù)據(jù),知道讀取完所有的流為止while((block=stream.Read(buffer,read,buffer.Length-read))>0)(/Z重新設(shè)定讀取位置read+=block;/Z檢查是否到達(dá)了緩存的邊界,檢查是否還有可以讀取的信息if(read==buffer.Length)(/Z嘗試讀取ー個字節(jié)intnextByte=stream.ReadByte();/Z讀取失敗則說明讀取完成可以返回結(jié)果if(nextByte==-l)(returnbuffer;}/Z調(diào)整數(shù)組大小準(zhǔn)備繼續(xù)讀取bytef]newBuf=newbyte[buffer.Length*2];Array.Copy(buffer,newBuf,buffer.Length);newBuf[read]=(byte)nextByte;“buffer是ー個引用(指針),這里意在重新設(shè)定buffer指針指向ー個更大的內(nèi)存buffer=newBuf;read++;))//如果緩存太大則使用ret來收縮前面while讀取的buffer,然后直接返回byte[]ret=newbyte[read];Array.Copy(bufter,ret,read);returnret;}文件讀寫實例usingSystem;usingSystem.IO;usingSystem.Collections;namespaceTextFileReader_csharp(classClassi(staticvoidMain(string[]args)(StreamReaderobjReader=newStreamReader('^c:\\test.txt^^);stringsLine=,H,;ArrayListarrText=newArrayList();while(sLine!=null)(sLine=objReader.ReadLine();if(sLine!=null)arrText.Add(sLine);objReader.Close();foreach(stringsOutputinarrText)Console.WriteLine(sOutput);Console.ReadLine();文件讀寫相關(guān)類介紹:文件讀寫操作涉及的類主要是:MarshalByRefObject類:允許在支持遠(yuǎn)程處理的應(yīng)用程序中跨應(yīng)用程序域邊界訪問對象;BinaryReader類:用特定的編碼將基元數(shù)據(jù)類型讀作二進制值。Binarywriter類:以二進制形式將基元類型寫入流,并支持用特定的編碼寫入字符串。Stream類:提供字節(jié)序列的一般視圖。FileStream類:公開以文件為主的Stream,既支持同步讀寫操作,也支持異步讀寫操作。Memorystream類:創(chuàng)建其支持存儲區(qū)為內(nèi)存的流。BufferedStream類:給另一流上的讀寫操作添加?個緩沖層。TextReader類:表示可讀取連續(xù)字符系列的閱讀器。Textwriter類:表示可以編寫ー個有序字符系列的編寫器。StreamReader類:實現(xiàn)ー個TextReader,使其以ー種特定的編碼從字節(jié)流中讀取字符。StreamWriter類:實現(xiàn)ー個TextWriter,使其以ー,種特定的編碼向流中寫入字符。StringReader類:實現(xiàn)從字符串進行讀取的TextReader。Stringwriter類:實現(xiàn)ー個用于將信息寫入字符串的TextWriter。該信息存儲在基礎(chǔ)StringBuilder中。File類在使用它們之前最好能了解它們的繼承關(guān)系,有助于作出最合適的選擇:另外還要注意一下Fileinfo和File類的ー些方法,如Create,CreateText,Open等,有時也會帶來方便。這些類的內(nèi)容比較繁多,更多內(nèi)容還請參考MSDN。下面是一些常見的問題及其解決方案:問題1:如何讀寫文本文件(并考慮不同的編碼類型);解決方案:創(chuàng)建一個FileStream對象用以引用該文件。要寫入文件,將FileStream対象封裝在StreamWritei?對象中,使用其重載了的Write方法;要讀取文件,將FileStream對象封裝在StreamReader対象中,使用其Read或ReadLine方法;.NETFramework允許通過StreamWriter和StreamReader類操作任何流來讀寫文本文件。當(dāng)使用Streamwriter類寫入數(shù)據(jù)時,調(diào)用它的Write方法,該方法在重我后可以支持所有常見的C#數(shù)據(jù)類型,包括字符串、字符、整數(shù)、浮點數(shù)以及十進制數(shù)等。但Write方法總會將的得到的數(shù)據(jù)轉(zhuǎn)換為文本,如果希望將這些文本轉(zhuǎn)換回原來的數(shù)據(jù)類型,應(yīng)使用WriteLine方法,以確保每個值都處于單獨的一行上。字符串的表現(xiàn)形式取決于你使用的編碼,最常見的編碼類型包括下面幾種:ASCII,UTF-16,UTF-7,UTF-8。.NETFramework在System.Text命名空間中為每種編碼類型提供了一一個類。在使用StreamWriter和StreamReader類時,可以指定需耍的編碼類型,或者使用默認(rèn)的UTF-8,而在讀取文本文件時,則要使用StreamReader類的Read或ReadLine方法。Read方法讀取單個字符或者指定個數(shù)的字符,返回類型為字符或字符數(shù)組:ReadLine方法則返回包含整行內(nèi)容的字符串:ReadToEnd方法從當(dāng)前位置讀取至流的結(jié)尾。(更多內(nèi)容還請參考MSDN)寫入文本文件的示例:using(FileStreamfs=newFileStream(fileName,FileMode.Create))(/Z創(chuàng)建一個StreamWriter對象,使用UTF-8編碼格式using(StreamWriterwriter=newStreamWriter(fs,Encoding.UTF8))|/Z分別寫入十進制數(shù),字符串和字符類型的數(shù)據(jù)writer.WriteLine(123.45M);writer.WriteLine("StringData");writer.WriteLine('A');))讀取文本文件的示例:H以只讀模式打開ー個文本文件using(FileStreamfs=newFileStream(fileName,FileMode.Open))(using(StreamReaderreader=newStreamReader(fs,Encoding.UTF8))stringtext=string.Empty;while(!reader.EndOfStream)(text=reader.ReadLine();txtMessage.Text+=text+Environment.NewLine;}})問題2:如何讀寫二進制文件(使用強數(shù)據(jù)類型);解決方案:創(chuàng)建一個FileStream對象用以引用該文件。要寫入文件,將FileStream對象封裝在Binarywriter對象中,使用其重載了的Write方法:要讀取文件,將FileStream対象封裝在BinaryReader對象中,使用相應(yīng)數(shù)據(jù)類型的Read方法。.NETFramework允許通過BinaryWriter和BinaryReader類操作任何流來讀寫二進制數(shù)據(jù)。當(dāng)使用BinaryWriter類寫入數(shù)據(jù)時,調(diào)用它的Write方法,該方法在重載后可以支持所有常見的C#數(shù)據(jù)類型,包括字符串、字符、整數(shù)、浮點數(shù)以及十進制數(shù)等,然后數(shù)據(jù)會被編碼為ー系列字節(jié)寫入文件,也可以配置該過程中的編碼類型。在使用二進制文件時,一定要特別注意其中的數(shù)據(jù)類型。當(dāng)你讀取數(shù)據(jù)時,一定要使用BinaryReader類的某種強類型的Read方法。例如,要讀取字符串,要使用ReadString方法。(BinaryWriter在寫入二進制文件時總會記錄字符串的長度以避免任何可能的錯誤)寫入文件的示例:using(FileStreamfs=newFileStream(fileName,FileMode.Create))(using(BinaryWriterwriter=newBinaryWriter(fs)){/Z寫入十進制數(shù),字符串和字符writer.Write(234.56M);writer.Write("String");writer.Write('!');)}讀取文件的示例:/Z以只讀模式打開一個二進制文件using(FileStreamfs=newFileStream(fileName,FileMode.Open))(using(StreamReadersr=newStreamReader(fs))(MessageBox.Show("全部數(shù)據(jù):"+sr.ReadToEnd());fs.Position=0;using(BinaryReaderreader=newBinaryReader(fs))/Z選用合適的數(shù)據(jù)類型讀取數(shù)據(jù)stringmessage=reader.ReadDecimal().ToString()+Environment.NewLine;message+=reader.ReadString()+Environment.NewLine;message+=reader.ReadChar().ToString();MessageBox.Show(message);)})問題3:如何異步讀取文件;解決方案:有時你需要讀取ー個文件但又不希望影響程序的執(zhí)行。常見的情況是讀取ー個存儲在網(wǎng)絡(luò)驅(qū)動器上的文件。FileStream提供了對異步操作的基本支持,即它的BeginRead和EndRead方法。使用這些方法,可以在.NETFramework線程池提供的線程中讀取ー個數(shù)據(jù)塊,而無須直接與System.Threading命名空間中的線程類打交道。采用異步方式讀取文件時,可以選擇每次讀取數(shù)據(jù)的大小。根據(jù)情況的不同,你可能會每次讀取很小的數(shù)據(jù)(比如,你要將數(shù)據(jù)逐塊拷貝至另ー個文件),也可能是一個相對較大的數(shù)據(jù)(比如,在程序邏輯開始之前需要一定數(shù)量的數(shù)據(jù))。在調(diào)用BeginRead時指定要讀取數(shù)據(jù)塊的大小,同時傳入一個緩沖區(qū)(buffer)以存放數(shù)據(jù)。因為BeginRead和EndRead需要訪問很多相同的信息,如FileStream,buffer,數(shù)據(jù)塊大小等,因此將這些內(nèi)容封裝?個單獨的類當(dāng)中是一個好主意。下面這個類就是ー個簡單的示例。AsyncProcessor類提供了StartProcess方法,調(diào)用它開始讀取,每次讀取操作結(jié)束,〇nCompはedRead回調(diào)函數(shù)會被觸發(fā),此時可以處理數(shù)據(jù),如果還有剩余數(shù)據(jù),則開始ー個新的讀取操作。默認(rèn)情況下,AsyncProcessor類每次讀取2KB數(shù)據(jù)。classAsyncProcessor(privateStreaminputstream;/Z每次讀取塊的大小privateintbufferSize=2048;publicintBufferSize(get{returnbufferSize;}set{bufferSize=value;}}/Z容納接收數(shù)據(jù)的緩存privatebyte[]buffer;publicAsyncProcessor(stringfileName)buffer=newbyte[bufferSize];/Z打開文件,指定參數(shù)為true以提供對異步操作的支持inputstream=newFileStream(fileName,FileMode.Open,FileAccess.Read,FileShare.Read,bufferSize,true);)publicvoidStartProcess(){/Z開始異步讀取文件,填充緩存區(qū)inputstream.BeginRead(buffer,0,buffer.Length,OnCompletedRead,null);}privatevoidOnCompletedRead(IAsyncResultasyncResult)(/Z已經(jīng)異步讀取ー個塊,接收數(shù)據(jù)intbytesRead=inputstream.EndRead(asyncResult);II如果沒有讀取任何字節(jié),則流已達(dá)文件結(jié)尾if(bytesRead>0)(/Z暫停以模擬対數(shù)據(jù)塊的處理Debug.WriteLine("異步線程:已讀取ー塊)Thread.Sleep(TimeSpan.FromMilliseconds(20));//開始讀取下ー塊inputstream.BeginRead(buffer,0,buffer.Length,OnCompletedRead,null);}else(/Z結(jié)束操作Debug.WriteLine("異步線程:讀取文件結(jié)束");inputStream.Close();)))使用該類時可以這么寫:/Z開始在另ー線程中異步讀取文件AsyncProcessorasynclO=newAsyncProcessorCtest.txt");asynclO.StartProcess();〃在主程序中,做其它事情,這里簡單地循環(huán)10秒DateTimestartTime=DateTime.Now;while(DateTime.Now.Subtract(startTime).TotalSeconds<10)(Debug.WiiteLine(”主程序:正在進行”);/Z暫停線程以模擬耗時的操作Thread.Sleep(TimeSpan.FromMilliseconds(100));}Debug.WriteLine("主程序:己完成");問題4:如何創(chuàng)建臨時文件;解決方案:有時需要在特定用戶的臨時目錄下創(chuàng)建一個臨時文件,這要求該文件具有唯一的名稱,避免與其它程序生成的臨時文件相沖突。我們會有多種選擇。最簡單的是,在程序所在目錄內(nèi)使用GUID或時間戳加上隨機值作為文件名稱。但Path類提供的方法還是可以為你節(jié)省工作量,這就是它的靜態(tài)GetTempFileName方法,它在當(dāng)前用戶的臨時冃錄下創(chuàng)建一個臨時文件(文件名稱一定是唯一的),臨時目錄通常類似于這樣:C:\DocumentsandSettings\[username]\LocalSettings'Temp。stringtempFile=Path.GetTempFileName();using(FileStreamfs=newFileStream(tempFile,FileMode.Open))(using(BinaryWriterwriter=newBinaryWriter(fs))(/Z寫入數(shù)據(jù)writer.Write("臨時文件信息");)}//Dosomething//最后刪除臨時文件File.Delete(tempFile);問題5:如何獲得隨機文件名;解決方案:使用Path.GetRandomFileName方法,它與GetTempFileName方法的不同之處在于它僅僅返回一個字符串但不會創(chuàng)建文件。問題6;監(jiān)視文件系統(tǒng)的變化;解決方案:如果指定路徑內(nèi)的文件發(fā)生改變(比如文件被修改或創(chuàng)建),你希望能對此作出反應(yīng)。如果程序與其它多個程序或業(yè)務(wù)處理相關(guān),常常需要創(chuàng)建一個程序,并且只有文件系統(tǒng)發(fā)生變化時它オ處于活動狀態(tài)。你可以創(chuàng)建一個這樣的程序,讓它定期區(qū)檢測指定目錄,此時會發(fā)現(xiàn)有件事情讓你苦惱:檢測得越頻繁,就會浪費越多的系統(tǒng)資源;而檢測得越少,那么檢測到變化的時間就會越長。這時可以使用FileSystemWatcher組件,指定要進行監(jiān)視的目錄或文件,并處理其Created,Deleted,Renamed,Changed事件。要使用FileSystemWatcher組件,首先要創(chuàng)建它的ー個實例,然后設(shè)置下列屬性:Path:指定要監(jiān)視的目錄:Filter:指定要監(jiān)視的文件類型,如"*.txt”;NotifyFilter:指定要監(jiān)視的變化類型;FileSystemWatcher會引發(fā)四個關(guān)鍵的事件:Created,Deleted,Renamed,Changed□這些事件都在其FileSystemEventArgs參數(shù)中提供了相關(guān)文件的信息:如文件名,路徑,改變類型,Renamed事件中還可以了解到改變前的文件名和路徑。如果要禁用這些事件,則將它的EnableRaisingEvents屬性設(shè)置為false。Created,Deleted,Renamed三個事件比較容易處理,但Changed事件就得當(dāng)心了,你需要設(shè)置它的NotifyFilter屬性以指示監(jiān)視那些類型的變化。否則,程序會在文件被修改時淹沒在不斷發(fā)生的事件中(緩存區(qū)溢出)?/Z設(shè)置相關(guān)屬性watcher.Path=appPath;watcher.Filter="*.txt";watcher.IncludeSubdirectories=true;//添加事件處理函數(shù)watcher.Created+=newFileSystemEventHandler(OnChanged);watcher.Deleted+=newFileSystemEventHandler(OnChanged);watcher.Changed+=newFileSystemEventHandler(OnChanged);watcher.Renamed+=newRenamedEventHandler(OnRenamed);voidOnRenamed(objectsender,RenamedEventArgse)(stringrenamedFormat="File:{0}被重命名為txtChangedlnfo.Text=string.Format(renamedFormat,e.OldFullPath,e.FullPath);}voidOnChanged(objectsender,FileSystemEventArgse)(/Z顯示通知信息txtChangedlnfo.Text="文件:"+e.FullPath+"發(fā)生改變"+Environment.NewLine;txtChangedlnfo.Text+="改變類型:"+e.ChangeType.ToString();}問題7:如何使用獨立存儲文件:解決方案:有時你需要將數(shù)據(jù)存儲在文件中,但對本地硬盤驅(qū)動器卻沒有必要的權(quán)限(FilelOPermission)〇這時要用到System」〇.IsolatedStorage命名空間中的類,這些類允許你的程序在特定用戶的目錄下將數(shù)據(jù)寫入文件而不需要直接訪問硬盤驅(qū)動器的權(quán)限:/Z創(chuàng)建當(dāng)前用戶的獨立存儲using(IsolatedStorageFilestore=IsolatedStorageFile.GetUserStoreForAssemblyO){/Z創(chuàng)建一個文件夾store.CreateDirectory(nMyFolder");/Z創(chuàng)建一個獨立存儲文件using(Streamfs=newlsolatedStorageFileStreamCMyFile.txt",FileMode.Create,store))(StreamWriterwriter=newStreamWriter(fs);writer.WriteLine("TestLine!'*);writer.Flush();)Debug.WriteLine("當(dāng)前大小:”+store.CurrentSize.ToString()+Environment.NewLine);Debug.WhteLine("范圍:"+store.Scope.ToString()+Environment.NewLine);stringQfiles=store.GetFileNames('**.*'^);if(files.Length>0)(Debug.WhteLine("當(dāng)前文件:'*+Environment.NewLine);foreach(stringfileinfiles)(Debug.WriteLine(file+Environment.NewLine);)))案例學(xué)習(xí):文件流FileStream綜合案例(二)本案例您將學(xué)習(xí)到:?如何通過用戶選擇文件夾,獲取文件夾信息。?如何通過用戶選擇文件,獲取文件信息。?如何通過文件流建立一個新的文本文件。?如何打開文本文件后重新寫文本信息流。?如何在C#中定義文件和文件夾。?文件流的資源釋放意義以及釋放資源的基本順序。?實驗步驟(D:由圖3-9所示,從工具箱之中拖拽三個GroupBox控件到Form窗體上,text屬性分別設(shè)置為:“添加物理路徑”、“打開文本文件”、“文本編輯區(qū)”;向第一個GroupBox控件拖拽ー個TextBox控件:再向第一個GroupBox控件拖拽ー個Button控件,text屬性設(shè)置為"選定文件夾”;向第二個GroupBox控件拖拽ー個TextBox控件;再向第二個GroupBox控件拖拽ー個Button控件,text屬性設(shè)置ガ選定文件”;向第三個GroupBox控件拖拽ー個richTextBox控件;再向窗體上非GroupBox區(qū)域拖拽ー個Button控件,text屬性設(shè)置為"保存文本文件”。圖3-9文件操作案例2界面圖?實驗步驟(2):在類Formll里添加一個字段TypeW,int類型,代表人為的操作類型;用鼠標(biāo)雙擊所有Button控件「進入?cs文件編輯狀態(tài)準(zhǔn)備進行開發(fā)。代碼加下;〃======M碼編輯======================usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Text;usingSystem.Windows.Forms;usingSystem.10;namespaceFi1eOptionApplication{publicpartialclassForml1:Form{publicForml1(){InitializeComponent();)〃添加變量TypeW,int類型,〇為默認(rèn),1為打開文件夾并建立new.txt文件,2為打開文本文件intTypeW=0;III<summary>//Z選定某個文件夾III</summary>privatevoidbuttonl_Click(objectsender,EventArgse){〃新建文件夾FolderBrowserDialogopenfolder=newFolderBrowserDialogO;if(openfolder.ShowDialog()=DialogResult.OK)textBoxl.Text=Convert.ToString(openfolder.SelectedPath);TypeW=1;))III<summary>//Z選定某個文件夾下面的文本文件III</summary>privatevoidbutton4_Click(objectsender,EventArgse){OpenFileDialogopenfile=newOpenFileDialogO;openfile.Filter="文本文件?.txt*;if(openfile.ShowDialog()==DialogResult.OK)FileStreamOpenFileStream=newFi1eStream(openfile.FileName,FileMode.Open,FileAccess.Read);StreamReadersr=newStreamReader(OpenFi1eStream,Encoding.Default);richTextBoxl.Text=sr.ReadToEndO;textBox2.Text=Convert.ToString(openfi1e.Fi1eName);OpenFileStream.Close();sr.Close();TypeW=2;))IIIくsummary〉///保存文本文件III</summary>privatevoidbutton2_Click(objectsender,EventArgse)(if(richTextBoxl.Text=string.Empty){MessageBox.Show("編輯文本文件內(nèi)容禁止為空!”,"提示信息”);return;)else(if(TypeW=1)(Fi1eStreamfs=newFi1eStream(textBoxl.Text+@"\\new.txt",Fi1eMode.Create,Fi1eAccess.ReadWrite);StreamWritersw=newStreamWriter(fs,Encoding.Default);sw.Write(richTextBoxl.Text);TypeW=0;MessageBox.Show("已經(jīng)成功的將文本文件寫入”+textBoxl.Text+"\\new.txt之中","提示信息");〃注意:此處順序絕不可調(diào)換,為什么?【另外,為什么必須關(guān)閉線程資源?】sw.CloseO;fs.CloseO;)elseif(TypeW==2)(FileStreamfs=newFileStream(textBox2.Text,FileMode.OpenOrCreate,FileAccess.ReadWrite);StreamWritersw=newStreamWriter(fs,Encoding.Default);sw.Write(richTextBoxl.Text);TypeW=0;MessageBox.Show("己經(jīng)成功的將文本文件寫入"+textBox2.Text+"之中","提示信息”);〃注意:此處順序絕不可調(diào)換,為什么?sw.CloseO;fs.CloseO;})))
讀寫二進制文件?本節(jié)學(xué)習(xí)目標(biāo):?了解二進制文件讀取器/編寫器?學(xué)習(xí)建立BinaryReader類的ー些主要方法?學(xué)習(xí)建立BinaryWriter類的ー些主要方法?學(xué)習(xí)通過二進制讀寫操作進行圖片的存儲與復(fù)制?學(xué)習(xí)通過二進制讀寫操作實現(xiàn)圖片文件與數(shù)據(jù)庫Image類型數(shù)據(jù)的存儲與讀取在前面兩節(jié),讀寫的文件都是針對文本文件。這ー節(jié),重點講述二進制文件的讀寫。什么是二進制文件呢?小知識:二進制文件英文:Binaryfiles-包含在ASCI!及擴展ASCII字符中編寫的數(shù)據(jù)或程序指令的文件。計算機文件基本上分為二種:二進制文件和ASCII(也稱純文本)文件,圖形文件及文字處理程序等計算機程序都屬于二進制文件。這些文件含有特殊的格式及計算機代碼。ASCII則是可以用任何文字處理程序閱讀的簡單文本文件。從本質(zhì)上來說他們之間沒有什么區(qū)別,因為他們在硬盤上都有一種的存放方式ーニ進制,但是如果要對他們有些區(qū)分的話,那可以這樣理解。我們現(xiàn)在的每個字符由一個或多個字節(jié)組成,每個字節(jié)都是用的ー128-127之間的部分?jǐn)?shù)值來表示的,也就是說,T28—127之間還有型數(shù)據(jù)沒有對應(yīng)任何字符的任何字節(jié)。如果?個文件中的毎個字節(jié)的內(nèi)容都是可以表示成字符的數(shù)據(jù),我們就可以稱這個文件為文本文件,可見,文本文件只是:進制文件中的ー種特例,為了與文本文件相區(qū)別,人們又把除了文本文件以外的文件稱為二進制文件,由于很難嚴(yán)格區(qū)分文本文件和二進制文件的概念,所以我們可以簡單地認(rèn)為,如果ー個文件專門用ア存儲文本字符的數(shù)據(jù),沒有包含字符以外的其他數(shù)據(jù),我們就稱之為文本文件,除此之外的文件就是:進制文件。3-4-1二進制文件讀取器/編寫器介紹在讀寫二進制文件時,需要研究的讀取器/編寫器組是BinaryReader和BinaryWriter,它們都從System.Object直接派生。這些類型可以讓我們從基層流中以簡潔的二進制格式讀取或?qū)懭腚x散數(shù)據(jù)類型。BinaryWriter類型定義了一個多次重載的Write。方法,用于把數(shù)據(jù)類型寫入基層的流。除了Write。方法,BinaryWriter還提供了另外一些成員讓我們能獲取或設(shè)置從Stream派生的類型,并且提供了隨機數(shù)據(jù)訪問的支持。建立讀取器/編寫器(BinaryReader和BinaryWriter)需要注意的事項有兩點:?要使用BinaryReader和BinaryWriter類?這兩個對象都需要在FileStream上創(chuàng)建小實驗:建立一個BinaryWriter對象FileStreamfilestream=newFileStream(Filename,FileMode.Create);BinaryWriterobjBinaryWriter=newBinaryWriter(filestream);類BinaryReader用特定的編碼將基元數(shù)據(jù)類型讀作二進制值。類BinaryReader有幾個常用的方法,如表3—13所示:表3-13類BinaryReader的常用方法方法說明Close()關(guān)閉當(dāng)前閱讀器及基礎(chǔ)流。Read()己重載。從基礎(chǔ)流中讀取字符,并提升流的當(dāng)前位置。
ReadDecimal()從當(dāng)前流中讀取十進制數(shù)值,并將該流的當(dāng)前位置提升十六個字節(jié)。ReadByteO從當(dāng)前流中讀取下一個字節(jié),并使流的當(dāng)前位置提升1個字節(jié)。Readlntl6()從當(dāng)前流中讀取2字節(jié)有符號整數(shù),并使流的當(dāng)前位置提升2個字節(jié)。Rcadlnt32()從當(dāng)前流中讀取4字節(jié)有符號整數(shù),并使流的當(dāng)前位置提升4個字節(jié)。ReadStringO從當(dāng)前流中讀取ー個字符串。字符串有長度前綴,一次7位地被編碼為整數(shù)。小實驗:建立一個BinaryReader類的ー些主要方法usingSystem;usingSystem.10;classBinaryRW(staticvoidMainO(inti=0;chart]invalidPathChars=Path.InvalidPathChars;MemoryStreammemStream=newMemoryStreamO;BinaryWriterbinWriter=newBinaryWriter(memStream);/Z寫入內(nèi)存binWriter.Write(*Invalidfilepathcharactersare:");for(i=0;i<invalidPathChars.Length;i++)(binWriter.Write(invalidPathChars[i]);)//用作生成編寫器的內(nèi)存流同樣作為生成讀取器的內(nèi)存流BinaryReaderbinReader=newBinaryReader(memStream);/Z設(shè)置流的起點memStream.Position=0;/Z從內(nèi)存中讀取數(shù)據(jù),并把數(shù)據(jù)寫入控制臺Console.Write(binReader.ReadString());char[]memoryData=newchar[memStream.I.ength-memStream.Position];for(i=0;i<memoryData.Length;i++)(memoryData[i]=Convert.ToChar(binReader.ReadO);)Console.WriteLine(memoryData);})類BinaryWriter以二進制形式將基元類型寫入流,并支持用特定的編碼寫入字符串。類BinaryWriter有幾個常用的方法,如表3—14所示:表3?14類BinaryWriter的常用方法方法說明Close()關(guān)閉當(dāng)前的BinaryWriter和基礎(chǔ)流。Flush()清理當(dāng)前編寫器的所有緩沖區(qū),使所有緩沖數(shù)據(jù)寫入基礎(chǔ)設(shè)備。Write()已重載。將值寫入當(dāng)前流。小實驗:建立一個BinaryWriter類的ー些主要方法usingSystem;usingSystem.10;classBinaryRW{staticvoidMain()(using(BinaryWriterbinWriter=newBinaryWriter(File.Open(fileName,FileMode.Create)))(binWriter.Write(aspectRatio);binWriter.Write(lookupDir);binWriter.Write(autoSaveTime);binWriter.Write(showStatusBar);)}寫二進制文件案例學(xué)習(xí)?本案例您將學(xué)習(xí)到:圖片文件二進制流的讀取并顯示在圖像控件之中:如何將圖像控件圖像讀取到內(nèi)存流,并另外存儲;saveFileDialog控件在另存文件中的作用。1.案例學(xué)習(xí):寫二進制文件案例——圖片的存儲與復(fù)制?實驗步驟(1):由圖3-10所示,從工具箱之中拖拽MainMenu控件、SaveFileDialog控件、GroupBox控件、PictureBox控件各ー個至UForm窗體上:Form窗體的text屬性設(shè)置為“圖片處理器”;GroupBox控件的text屬性設(shè)置為"圖片顯示區(qū)";PictureBox控件的sizemode屬性設(shè)置為zoom;MainMenu控件添加菜單項及子項如表3—15所示:表3-15圖片處理器菜單控件的菜單項及子項設(shè)置菜單項子項其他屬性圖片(&P)打開圖片(&0)快捷鍵等其他屬性根據(jù)自己設(shè)計定(下同)復(fù)制圖片(&C)關(guān)閉(&Q)
Dialog1menuStrip代碼編輯///=SystemusingSystem.Collections.GenericusingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.TextusingusingSystem.10usingInitializeComponent()<summary>GetFileBytespublicForml2()publicpartialDialog1menuStrip代碼編輯///=SystemusingSystem.Collections.GenericusingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.TextusingusingSystem.10usingInitializeComponent()<summary>GetFileBytespublicForml2()publicpartialSystem.Windows.FormsnamespaceFileOptionApp1ication圖3-10圖片處理器界面闇?實驗步驟(2):用鼠標(biāo)雙擊主界面上菜單控件的所有菜單項,進入.cs文件編輯狀態(tài)準(zhǔn)備進行開發(fā)。代碼加Form12:Form?輸入?yún)?shù):Filename:文件名稱:*輸出參數(shù):比特流類型*返回值:byte口二進制流?創(chuàng)建人:錢哨*創(chuàng)建日期:09-7-9*描 述:將讀取的文件轉(zhuǎn)化成為二進制流。///<summary>III</summary>III<paramname="Filename”》打開的圖片具體路徑及文件名稱く/param》II!くreturns)比特流類型く/returns)publicbyte[]GetFileBytes(stringFilename)(if(Filename=="*)returnnul1;try(FileStreamfileStream=newFi1eStream(Fi1
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 單位蔬菜供應(yīng)合同范本
- 合同范本其他事項
- 合同范本軟件畫畫
- 卷簾窗簾購銷合同范例
- 2025年耐磨合金鑄鐵項目建議書
- 新西蘭蜂蜜采購合同范本
- 水果購銷合同范本
- 家具設(shè)計合同范本
- 單位車輛定點維修合同范本
- 醫(yī)院租賃合同范本
- 隨機交易策略(TB版)
- 《綠色建筑設(shè)計原理》課件
- 中醫(yī)館裝修合同范本
- 1.1 銳角三角函數(shù)(第1課時) 課件 2024-2025學(xué)年北師大版九年級數(shù)學(xué)下冊
- 椎管打骨水泥后的護理
- 學(xué)習(xí)與科技的融合主題班會
- 《直播銷售》課件-項目一 認(rèn)識直播與直播銷售
- 2025年南京科技職業(yè)學(xué)院高職單招數(shù)學(xué)歷年(2016-2024)頻考點試題含答案解析
- 2025-2030年中國航空配餐行業(yè)市場發(fā)展現(xiàn)狀及投資前景規(guī)劃研究報告
- 新課標(biāo)背景下的跨學(xué)科學(xué)習(xí)內(nèi)涵、設(shè)置邏輯與實踐原則
- 母嬰分離產(chǎn)婦的護理
評論
0/150
提交評論