目錄
一、概述
二、文件系統
1、檢查驅動器信息
2、Path
3、文件和文件夾
三、流
1、FileStream
2、StreamWriter與StreamReader
3、BinaryWriter與BinaryReader
?
一、概述
文件,具有永久存儲及特定順序的字節組成的一個有序、具有名稱的集合;
流,提供一種向后備存儲寫入字節和從后備存儲讀取字節的方式;?
讀寫文件和目錄時可使用簡單的API,也可使用先進的API提供更多的功能;
使用流,可以壓縮數據,并且利用內存映射的文件和管道在不同的任務間共享數據;
?
二、文件系統
System.IO名稱空間包含一些簡單的API,其中最重要的類用于瀏覽文件系統和執行操作,如移動、復制和刪除文件:
- FileSystemInfo-這是表示任何文件系統對象(如FileInfo和DirectoryInfo)的基類;
- FileInfo和File-表示文件系統上的文件;
- DirectoryInfo和Directory-表示文件系統上的文件夾;
- Path-包含的靜態成員可用于處理路徑名;
- DriveInfo-它的屬性和方法提供了指定驅動器的信息;
1、檢查驅動器信息
使用DriveInfo的GetDrives()靜態方法獲取DriveInfo對象數組,再訪問每個驅動器信息;
var driveInfos = DriveInfo.GetDrives();
foreach (var driveInfo in driveInfos) Console.WriteLine($"Name:{driveInfo.Name} totalSize={driveInfo.TotalSize} freeSpace={driveInfo.TotalFreeSpace}");
?
2、Path
最常用的方法:
- Path.Combine(),可把任意個字符串參數組合成完整的路徑返回;
- Path.GetFileName(),獲取帶擴展名的文件名;
- Path.GetFileNameWithoutExtension(),獲取不帶擴展的文件名;
- Path.GetExtension(),獲取擴展名;
- Path.GetDirectoryName(),獲取文件夾路徑名;
- Path.GetFullPath(),獲取包含文件名及擴展名的全路徑名;
- Path.GetTempFileName(),返回一個臨時文件夾路徑;
- Path.GetRandomFileName(),返回一個隨機文件名;
- Path.ChangeExtension(),修改指定文件的擴展名;
string path= Path.Combine(Directory.GetCurrentDirectory(),"test.txt");
var path1=Path.GetFileName(path);
var path2=Path.GetFileNameWithoutExtension(path);
var path3=Path.GetExtension(path);
var path4=Path.GetDirectoryName(path);
var path5=Path.GetFullPath(path);
Console.WriteLine($"文件名:{path1} 無擴展文件名{path2} 擴展:{path3}\n文件夾路徑:{path4}\n全路徑名:{path5}");
Environment.GetFolderPath(),獲取特殊文件夾的路徑:
var foldPath=Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
Console.WriteLine(foldPath);//C:\Users\Administrator\Documents
?
3、文件和文件夾
?File、Directory定義靜態方法,FileInfo、DirectoryInfo提供實例方法,對于大多文件屬性只讀不可修改,但可設置創建時間和最后一次訪問時間;
①File常用方法:?
- File.WriteAllText(),創建并寫入文件;
- File.WriteAllLines(),創建并寫入所有行;
- File.ReadAllBytes(),讀取文件所有內容;
- File.ReadAllLines(),讀取文件所有行;
- File.AppendAllText(),追加的方式寫入所有內容;
- File.AppendAllLines(),追加的方式寫入所有行;
- File.Copy(),復制文件;
- File.Exists(),判斷文件是否存在;
- File.Create(),創建指定路徑文件;
- File.Open(),打開指定路徑上的FileStream(文件流);
- File.OpenWrite(),打開或創建一個文件用于寫,返回可寫的流(流位置在開始);
- File.OpenRead(),打開存在的文件用于讀,返回可讀的流;
②Directory常用方法:?
- Directory.Exists(),判斷文件夾是否存在;
- Directory.GetDirectories(),獲取指定目錄中所有子目錄的名稱;
- Directory.GetDirectoryRoot(),返回指定路徑的卷信息、根信息或二者同時返回;
- Directory.GetCurrentDirectory(),獲取當前工作目錄;
- Directory.GetFiles(),獲取指定目錄的所有文件名稱;
- Directory.GetFileSystemEntries(),獲取所有文件和子目錄名稱;
- Directory.GetParent(),檢索指定路徑的父目錄;
?③FileInfo常用屬性(方法大多與File靜態類相同)
- Directory:獲取父目錄實例;
- DirectoryName:獲取表示目錄完整路徑的字符串;
- FullName:獲取目錄或文件的完整目錄;
- Name:獲取文件名;
- IsReadOnly,獲取和設置文件只讀;
- Extension,獲取文件擴展名;
- CreationTime,獲取和設置文件創建時間;
- LastAccessTime,獲取和設置文件最后訪問時間;
- Attributes,獲取和設置文件的特性;
- Length,獲取文件大小,以字節為單位;
④DirectoryInfo常用屬性(方法大多與Directory靜態類相同)
- Extension:獲取表示文件擴展名部分的字符串;
- Parent:獲取指定子目錄的父目錄;
- Root:獲取路徑的根部分;
?
三、流
流是一個用于傳輸數據的對象,數據可以向兩個方向傳輸,如果數據從外部源傳輸到程序中,為讀取流,如果數據從程序傳輸到外部源中,為寫入流;
外部源常常是一個文件,但也不完全是文件,外部數據源可以是?:文件流,網絡流、內存流或任意數據源;
Stream類,是構成所有其它流的抽象類;
一些流可以鏈接起來,比如DeflateStream可壓縮數據(該流可寫入FileStream、MemoryStream或NetworkStream),CryptoStream可以加密數據,可以鏈接DeflateStream和CryptoStream,再寫入FileStream;
1、FileStream
文件流,在磁盤或網絡路徑上指向文件的流;
①FileStream常用構造器:
- 參數1,指定文件路徑;
- 參數2,FileMode枚舉(Append追加或新建,Create新建或改寫,Open打開文件,CreateNew新建,OpenOrCreate,打開文件或新建,Truncate打開并清空);
- 參數3,FileAccess枚舉,讀、寫、讀與寫;
- 參數4,FileShare枚舉,Delete、None、Read、Write。。。;
②常用屬性:
- CanRead、CanSeek、CanTimeout、CanWrite;
- IsAsync,是異步還是同步打開文件流;
- Length,獲取用字節表示的流長度;
- Name、Position、ReadTimeout、WriteTimeout;
③常用方法:
- BeginRead()、BeginWrite(),異步讀、寫操作;
- Close()、Read()、ReadByte()、WriteByte();
- Write(),寫入一個字節數組或Span類型(不用傳開始位置和大小);
- EndRead(),等待掛起的異步讀取完成;
- EndWrite(),結束異步寫入,在I/O操作完成前一直阻止;
- (Unlock)Lock(),允許讀取訪問的同時防止其它進程更改FileStream;
- Seek(),設置該流當前位置;
- SetLength(),設置讀流的長度;
- CopyTo(),復制流;
?
2、StreamWriter與StreamReader
由于直接讀寫流不是那么容易,所以一般使用讀寫器和寫入器;
基類分別為TextWriter和TextReader(也是StringWriter和StringReader基類);
文本文件的寫入、讀取流,一般以一個Stream類型對象構造(可指定編碼);
①StreamWriter
常用屬性:Encoding、Formatprovider、NewLine、AutoFlush;
常用方法(部分方法提供異步):
- Close(),關閉當前流對象;
- Write(),寫字符串到流;
- WriteLine(),寫一行字符串到流;
- Dispose(),釋放當前流對象資源;
- Flush(),刷新(清空)當前流緩存區;
②StreamReader
常用屬性:EndOfStream,可檢查文件的末尾;
常用方法(部分方法提供異步):
- Close()、Read()、ReadLine(),同上
- ReadBlock(),讀取最大count的字符并從index開始寫入buffer;
- ReadToEnd(),將整個流(從當前位置到結尾)作為字符串讀取;
?
3、BinaryWriter與BinaryReader
專門用于讀寫二進制格式的流產品API ;
以Stream類型對象構造;
①BinaryWriter,以二進制形式將基元類型寫入流
常用方法:
- Close(),關閉流;
- Write(),寫字節數組(提供string、int等多種重載)到流;
- Seek(),寫入位置標識偏移到指定位置;
②BinaryReader,用特定編碼將基元數據類型讀作二進制值
常用方法:
- Close(),關閉流;
- ReadByte(),讀取一個字節返回
- ReadBytes(),讀取指定count字節返回
- Read(),從index開始讀取count個字節到buffer中;
- ReadBoolean(),ReadChar(),ReadInt32(),ReadString()。。。讀取指定類型返回;? ? ??
?
?
?