1. 程式人生 > >c#文字檔案寫入

c#文字檔案寫入

        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 獲取編碼;
        }