System.IO命名空間中常用的非抽象類
BinaryReader | 從二進制流中讀取原始數據 |
BinaryWriter | 從二進制格式中寫入原始數據 |
BufferedStream | 字節流的臨時存儲 |
Directory | 有助於操作目錄結構 |
DirectoryInfo | 用於對目錄執行操作 |
DriveInfo | 提供驅動信息 |
File | 有助於文件處理 |
FileInfo | 用於對文件執行操作 |
FileStream | 用於文件中任何位置的讀寫 |
MemoryStream | 用於隨機訪問存儲在內存中的數據流 |
Path | 對路徑信息執行操作 |
StreamReader | 從字節流中讀取數據 |
StreamWriter | 用於向一個流中寫入字符 |
StringWriter | 用於讀取字符串緩沖區 |
StringReader | 用於寫入字符串緩沖區 |
FileStream類:
FileStream f = new FileStream("ont.txt", FileMode.Open, FileAccess.Read, FileShare.Read);
FileMode表示打開的方式 |
|
FileAccess表示用來讀/寫和讀/寫權限 | 操作的模式有:read、Write、readwrite |
FileShare類似文件鎖的東西 |
|
代碼示例:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; namespace ConsoleApplication3 { class Program { static void Main(string[] args) { /* * ================ Path =============== string file = @"D:\a\b\c\one.txt"; Console.WriteLine(Path.GetDirectoryName(file)); // 獲取文件的路徑 Console.WriteLine(Path.GetExtension(file)); // 獲取文件擴展名 Console.WriteLine(Path.GetFileName(file)); // 獲取文件名(包含擴展) Console.WriteLine(Path.GetFullPath("123.txt")); // 可以根據相對路徑獲取全路徑 Console.WriteLine(Path.GetRandomFileName()); // 隨即返回一個文件名(不重復的文件名) Console.WriteLine(Path.GetTempPath()); // 返回一個臨時目錄 Console.ReadKey(); */ /* * ========================= File =============================== string logName = "delete.txt"; // 文件名 string filePath = Path.GetFullPath(logName); // 獲取全路徑 if (!File.Exists(filePath)) { // 如果文件不存在 File.Create(filePath).Close(); // 創建文件並且關閉 } // 讀取還可以使用 File.ReadAllLines(filePath)按行讀取 string logtext = File.ReadAllText(filePath); // 讀取文件 Console.WriteLine(logtext); logtext += "\r\n" + DateTime.Now.Date; Console.WriteLine(filePath); File.WriteAllText(filePath, logtext); // 將內容寫進文本 Console.ReadKey(); */ /* * ======================= FileInfo ============================== string fileName = "delete.txt"; string filePath = Path.GetFullPath(fileName); FileInfo fi = new FileInfo(fileName); // 創建管理文件的軟連接 if (!fi.Exists) { Console.WriteLine("文件不存在!!!"); } var writeThing = fi.AppendText(); // 追加方式 writeThing.WriteLine(DateTime.Now.ToString()); // 追加文本 writeThing.Close(); // 關閉 var readThing = fi.OpenText(); // 讀取 Console.WriteLine(readThing.ReadToEnd()); readThing.Close(); // 關閉 Console.ReadKey(); */ /* * ================================== Directory =========================================== string filePath = @"F:\下載\C#完整版.NET教程(價值398元)\04NetFramework\【IT教程網】04NetFramework\Day02"; string fileP = filePath + @"\abc"; if (!Directory.Exists(fileP)) { // 判斷文件是否存在,如果文件不存在那么創建文件目錄 Directory.CreateDirectory(fileP); } foreach(var item in Directory.GetFiles(filePath)){ Console.WriteLine(item); // 輸出該文件下的子文件名稱 } Console.WriteLine("\r\n"); foreach(var item in Directory.GetDirectories(filePath)) { Console.WriteLine(item); // 輸出該目錄下的子目錄 } Console.WriteLine(Directory.GetParent(filePath)); // 返回父類目錄 Console.ReadKey(); */ /* * ======================== DirectoryInfo ================================ string filePath = @"F:\下載\C#完整版.NET教程(價值398元)\04NetFramework\【IT教程網】04NetFramework\Day02"; DirectoryInfo dir = new DirectoryInfo(filePath); dir.CreateSubdirectory(@"ab\cd\ef\gh\kj"); // 可連續創建 foreach (var item in dir.GetDirectories()) { Console.WriteLine(item); // 輸出當前文件夾子目錄 } Console.WriteLine("\n"); foreach(var item in dir.GetDirectories()) { Console.WriteLine(item); // 輸出當前文件夾子目錄 } Console.ReadKey(); */ /* * ================================== DriveInfo ================================= // 對磁盤進行操作 foreach(DriveInfo item in DriveInfo.GetDrives()) { Console.WriteLine(item); // 獲取所有驅動的名稱(顯示磁盤的數量) Console.WriteLine(item.DriveType); // 獲取類型 if (item.IsReady) { // 判斷磁盤是否准備就緒 Console.WriteLine(item.DriveFormat); // 獲取存儲格式 Console.WriteLine(item.TotalSize); // 獲取磁盤大小,默認是比特單位 Console.WriteLine((item.TotalSize * 1.0) / (1024.0*1024.0*1024.0)); // 單位轉換,KB/M/G Console.WriteLine((item.TotalFreeSpace * 1.0) / (1024.0 * 1024.0 * 1024.0)); // 剩余可用路徑,這里轉換為G } Console.WriteLine(); } Console.ReadKey(); */ } } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; namespace ConsoleApplication3 { class Program { static void Main(string[] args) { // 文件系統的監控 FileSystemWatcher FileSystemWatcher watcher = new FileSystemWatcher(@"F:\下載\C#完整版.NET教程(價值398元)\04NetFramework\【IT教程網】04NetFramework\Day02"); // 監聽該目錄 watcher.NotifyFilter = (NotifyFilters.LastAccess | NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.DirectoryName); // 設置過濾器,LastAccess上一次打開的日期,LastWrite最后一次修改,FileName/DirectoryName文件名或者目錄名的修改 // 事件的注冊 watcher.Changed += new FileSystemEventHandler(OnChanged); // 監聽改變事件,函數OnChanged里面的事件 watcher.Created += new FileSystemEventHandler(OnChanged); // 監聽創建事件,函數OnChanged里面的事件 watcher.Deleted += new FileSystemEventHandler(OnChanged); // 監聽刪除事件,函數OnChanged里面的事件 watcher.Renamed += new RenamedEventHandler(OnRenamed); // 監聽重命名事件,函數OnChanged里面的事件 watcher.Error += new ErrorEventHandler(OnError); // 監聽錯誤事件,函數OnError里面的事件 watcher.EnableRaisingEvents = true; // 啟用組件 Console.WriteLine("Press 'Enter' to exit..."); Console.ReadKey(); } // OnChanged事件 private static void OnChanged(object source, FileSystemEventArgs e) { WatcherChangeTypes changeType = e.ChangeType; // 獲取發生的類型 // e.FullPath獲取文件路徑及其文件名 Console.WriteLine("The File {0}=>{1}", e.FullPath, changeType.ToString()); } // OnRenamed事件 private static void OnRenamed(object source, RenamedEventArgs e) { WatcherChangeTypes changeType = e.ChangeType; // e.OldFullPath 獲取改變前文件路徑及其文件名 Console.WriteLine("The File {0} {2} to {1}", e.OldFullPath, e.FullPath, changeType.ToString()); } private static void OnError(object source, ErrorEventArgs e) { Console.WriteLine("An error has occurred."); } } }
對文件的讀寫操作:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; namespace ConsoleApplication3 { class Program { static void Main(string[] args) { // 不常用(實際不會這樣子用) /* // 使用FileStream類來管理文件數據 string overview = "Most commercial application, such as..."; // 定義寫入的字符串 FileInfo fileStore = new FileInfo("123.txt"); // 打開對應的文件,默認當前路徑 FileStream conduit = fileStore.Create(); // 創建 byte[] encodedOverview = new UTF8Encoding(true).GetBytes(overview); // encodedOverview數組格式的,將其進行編碼 conduit.Write(encodedOverview, 0, encodedOverview.Length); // 將編碼后的內容(第一個參數固定式byte數組)寫進去,需要傳遞從那個位置開始,多長 conduit.Close(); // 關閉 */ // /* // 使用MemoryStream類來管理內存數據 byte[] overview = new UTF8Encoding(true).GetBytes("Most commercial application, such as..."); // 同樣編碼字符串 MemoryStream conduit = new MemoryStream(overview.Length); // 開辟內存空間 conduit.Write(overview, 0, overview.Length); // 進行寫入,起始位置,長度 Console.WriteLine(conduit.Position.ToString()); // 獲取寫入指針的當前位置 conduit.Flush(); // 緩存的數據寫進內存空間 conduit.Seek(0, SeekOrigin.Begin); // 將文件指正寫入到首部 // 讀取 byte[] overviewRead = new byte[conduit.Length]; // 創建內存流 conduit.Read(overviewRead, 0, ((int)conduit.Length)); // 讀取,從0開始讀取,讀取長度為((int)conduit.Length) Console.WriteLine(new UTF8Encoding().GetChars(overviewRead)); conduit.Close(); */ // /* // 使用BufferedStream來提高流性能 string overview = "Most commercial application, such as..."; // 字符串 FileInfo fileStore = new FileInfo("123.txt"); // 打開文件 FileStream conduit = fileStore.Create(); // 創建 BufferedStream fileBuffer = new BufferedStream(conduit); // 創建緩沖區 byte[] encodedOverview = new UTF8Encoding(true).GetBytes(overview); // 編碼內容 fileBuffer.Write(encodedOverview, 0, encodedOverview.Length); // 寫進緩沖區 fileBuffer.Close(); // 關閉緩沖區 conduit.Close(); // 關閉文件流 */ /////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////// // 常用(簡便) // // 兩大分類: 二進制文件、文本文件 // 二進制文件區分BinaryReader/BinaryWriter // 文本文件又分為:文件、字符串。區分:StringReader/StringWriter // // 下面的文本文件讀取 /* // 不使用數據庫和文件的情況下存儲字符串 StringBuilder sb = new StringBuilder(); TextWriter tw = new StringWriter(sb); // 寫內容(支持多種重載) tw.Write("您好,"); tw.Write(123); tw.Write("\tData:{0}\t", DateTime.Now); tw.WriteLine("bye!"); // 讀取操作 TextReader tr = new StringReader(sb.ToString()); // 注意傳遞進去的是字符串 Console.WriteLine(tr.ReadToEnd()); // 讀取 Console.ReadKey(); */ // /* // 對文件進行操作 TextWriter tw = new StreamWriter("123.txt"); // 讀取當前路徑下的文件 // 寫入同上 tw.Write("您好,"); tw.Write(123); tw.Write("\tData:{0}\t", DateTime.Now); tw.WriteLine("bye!"); tw.Close(); // 關閉 // 讀取 TextReader tr = new StreamReader("123.txt"); Console.WriteLine(tr.ReadToEnd()); // 下面是二進制的 Stream sm = new FileStream("456.dat", FileMode.OpenOrCreate); // 如果文件存在就打開文件,如果文件不存在那么創建並打開文件 BinaryWriter bw = new BinaryWriter(sm); bw.Write(true); bw.Write(123); bw.Write("hello"); bw.Close(); sm.Close(); // 讀取 BinaryReader sr = new BinaryReader(new FileStream("456.dat", FileMode.Open)); bool b = sr.ReadBoolean(); // 讀取bool int i = sr.ReadInt32(); // 讀取整型 string s = sr.ReadString(); // 讀取字符串 Console.WriteLine("bool值:{0},整型:{1},字符型:{2}", b, i, s); Console.ReadKey(); sr.Close(); // 注:值得注意的是二進制的讀寫一定要保持他們的順序,不然會報錯 */ } } }
2019-8-3
/* * 用戶: NAMEJR * 日期: 2019/8/3 * 時間: 19:52 */ using System; using System.Collections.Generic; using System.Drawing; using System.IO; using System.Text; using System.Windows.Forms; namespace 文件讀取 { /// <summary> /// Description of MainForm. /// </summary> public partial class MainForm : Form { public MainForm() { InitializeComponent(); } // 文件讀取 void Btn_ReadFileClick(object sender, EventArgs e) { // OpenFileDialog 打開文件對話框 OpenFileDialog ofd = new OpenFileDialog(); // ShowDialog:模態顯示,顯示時獨占進程(不允許其它窗口顯示),當窗口關閉,后續代碼才會繼續運行 // Show:非模態顯示,可以和其它窗口互相切換,后續代碼不會停留 if(ofd.ShowDialog()!= DialogResult.OK) { return; } //this.TB_Content.Text=File.ReadAllText(ofd.FileName,Encoding.Default); FileStream fs = new FileStream(ofd.FileName,FileMode.Open,FileAccess.Read); StreamReader sr = new StreamReader(fs,Encoding.Default); /* while(!sr.EndOfStream) { this.TB_Content.Text += sr.ReadLine(); // 單行讀取 }*/ this.TB_Content.Text = sr.ReadToEnd(); // 全部輸出 } // 文件保存 void Btn_SaveFileClick(object sender, EventArgs e) { // SaveFileDialog 保存文件對話框 SaveFileDialog sfd = new SaveFileDialog(); if(sfd.ShowDialog()!=DialogResult.OK) { return; } //File.WriteAllText(sfd.FileName,this.TB_Content.Text,Encoding.Default); StreamWriter sw = new StreamWriter(sfd.FileName,true,Encoding.Default); // 第二個參數為true表示不覆蓋(追加) sw.Write(this.TB_Content.Text); sw.Flush(); } } }
一句話寫入:File.WriteAllText("D:/Code/Demo/Demo/upload/index.html", l_strXml);
AddBy 2019-10-24
using System; using System.IO; namespace 控制台 { class Program { static void Main(string[] args) { string l_strPath = @"D:\文件資源\1.xlsx"; // 使用ReadAllText可以進行一次性讀取出文檔內容,並且指定編碼 //Console.WriteLine(File.ReadAllText(l_strPath, Encoding.GetEncoding("GB2312"))); // // 使用ReadToEnd FileStream l_fileStream = new FileStream(l_strPath, FileMode.Open); StreamReader l_streamReader = new StreamReader(l_fileStream); Console.WriteLine(l_streamReader.ReadToEnd()); // 也可以判斷狀態 Console.ReadKey(); } } }
EndAddBy 2019-10-24