c#文字檔案寫入
阿新 • • 發佈:2019-01-02
private void 跟蹤記錄(string 輸出內容) { String 儲存路徑 = @System.Environment.CurrentDirectory + "\\過程跟蹤"; if (!Directory.Exists(儲存路徑)) Directory.CreateDirectory(儲存路徑); String 儲存檔名 = @儲存路徑 + "\\過程跟蹤記錄.txt "; StreamWriter 寫入 = new StreamWriter(儲存檔名, true);//以可以追加文字的方式開啟檔案流 寫入.WriteLine(輸出內容); 寫入.Flush(); 寫入.Close(); }
private void 修改日記(string 輸出內容) { String 儲存路徑 = @System.Environment.CurrentDirectory + "\\修改日記"; if (Directory.Exists(儲存路徑)) { String 儲存檔名 = @儲存路徑 + "\\" + 時間.ToLongDateString() + ".txt "; FileInfo 檔案 = new FileInfo(儲存檔名); if (!檔案.Exists) { FileStream 建立或覆蓋 = File.Create(儲存檔名); 建立或覆蓋.Flush(); 建立或覆蓋.Close(); } //{ 檔案.Create(); }FileStream 建立只寫檔案 = 檔案.OpenWrite(); 建立只寫檔案.Close(); //StreamWriter 寫入 = File.AppendText(儲存檔名);//以可以追加文字的方式開啟檔案流 StreamWriter 寫入 = new StreamWriter(儲存檔名, true);//以可以追加文字的方式開啟檔案流 寫入.WriteLine(輸出內容); 寫入.Flush(); 寫入.Close(); } else { Directory.CreateDirectory(儲存路徑); String 儲存檔名 = @儲存路徑 + "\\" + 時間.ToLongDateString() + ".txt "; FileStream 建立或覆蓋 = File.Create(儲存檔名); 建立或覆蓋.Flush(); 建立或覆蓋.Close(); StreamWriter 寫入 = new StreamWriter(儲存檔名);//不可追加文字 寫入.WriteLine(輸出內容); 寫入.Flush(); 寫入.Close(); } }
編碼問題修改程式碼如下:參考資料
static void 寫改記錄(string 輸出內容, string 資料夾, string 檔名, string 檔案序, bool 選擇 = true) { String 儲存路徑 = @System.Environment.CurrentDirectory + "\\" + 資料夾; string 建立檔案 = @儲存路徑 + "\\" + 檔案序 + ".txt "; try { Thread 寫入文字 = new Thread(delegate() { if (!Directory.Exists(儲存路徑)) Directory.CreateDirectory(儲存路徑); String 儲存檔名 = @儲存路徑 + "\\" + 檔名 + ".txt "; FileInfo 檔案 = new FileInfo(儲存檔名); StreamWriter 寫入 = new StreamWriter(儲存檔名, 選擇, Encoding.GetEncoding("GB2312")); if (選擇) 寫入.Write(輸出內容); else 寫入.WriteLine(輸出內容); 寫入.Flush(); 寫入.Close(); if (檔案.Length > 1000 * 1024) 檔案.MoveTo(建立檔案); }); 寫入文字.Start(); 寫入文字.Join(); } catch (Exception Ts) { Console.WriteLine("!" + Ts.ToString()); } finally { } } static List<string> 讀文字記錄(string 檔案路徑) { List<string> 內容 = new List<string>(); if (Directory.Exists(檔案路徑.Remove(檔案路徑.LastIndexOf("\\")))) { FileInfo 檔案 = new FileInfo(檔案路徑); if (!檔案.Exists) { FileStream 建立或覆蓋 = File.Create(檔案路徑); 建立或覆蓋.Close(); } if (檔案.Exists) using (FileStream 開啟 = new FileStream(檔案路徑, FileMode.Open)) { using (StreamReader 讀取 = new StreamReader(開啟, 獲取文字編碼(開啟, Encoding.GetEncoding("GB2312")))) while (!讀取.EndOfStream) 內容.Add(讀取.ReadLine()); } } return 內容; } static Encoding 獲取文字編碼(FileStream 開啟檔案, Encoding 編碼) { Encoding 獲取編碼 = 編碼; if (開啟檔案 != null && 開啟檔案.Length >= 2) { byte byte1 = 0, byte2 = 0, byte3 = 0; long Seek位置 = 開啟檔案.Seek(0, SeekOrigin.Begin);//儲存當前Seek位置 開啟檔案.Seek(0, SeekOrigin.Begin); byte1 = Convert.ToByte(開啟檔案.ReadByte()); byte2 = Convert.ToByte(開啟檔案.ReadByte()); if (開啟檔案.Length >= 3) byte3 = Convert.ToByte(開啟檔案.ReadByte()); if (byte1 == 0xFE && byte2 == 0xFF) 獲取編碼 = Encoding.BigEndianUnicode; if (byte1 == 0xFF && byte2 == 0xFE && byte3 != 0xFF) 獲取編碼 = Encoding.Unicode; if (byte1 == 0xEF && byte2 == 0xBB && byte3 == 0xBF) 獲取編碼 = Encoding.UTF8; 開啟檔案.Seek(Seek位置, SeekOrigin.Begin);//恢復Seek位置 } return 獲取編碼; }