C# 替换文本文件中的某一行 (要求此文件存在)

时间:2023-02-11 08:41:22
     /// <summary>
       /// LineIndex 表示新的内容所在的行位置
       /// </summary>
       /// <param name="sFileName"></param>
       /// <param name="sOrigionContent"></param>
       /// <param name="sNewLineContent"></param>
       /// <param name="LineIndex"></param>
       public static void SaveTxtReplaceOneLine(string sFileName, string sOrigionContent, string sNewLineContent, int iNewLineIndex)
       {
           try
           {
               StringBuilder sbNewSave = new StringBuilder();
               sFileName = sFileName.Replace("|", "_");
               string sFolder = Directory.GetParent(sFileName).ToString();
               if (!System.IO.Directory.Exists(sFolder))
               {
                   System.IO.Directory.CreateDirectory(sFolder);
               }

               if (!System.IO.File.Exists(sFileName))
               {
                   throw new Exception("file not exist");
               }

               string[] arrLine = sOrigionContent.Trim().Split(Convert.ToChar(Keys.Return));
               for (int i = 0; i < iNewLineIndex; i++)
               {
                   sbNewSave.AppendLine(arrLine[i].Trim('\r').Trim('\n'));
               }
               sbNewSave.AppendLine(sNewLineContent);
               for (int i = iNewLineIndex + 1; i < arrLine.Length; i++)
               {
                   sbNewSave.AppendLine(arrLine[i].Trim('\r').Trim('\n'));
               }

               FileStream fsTxtWrite = new FileStream(sFileName, FileMode.Create, FileAccess.Write);
               StreamWriter srWrite = new StreamWriter(fsTxtWrite, System.Text.Encoding.UTF8);
               //StreamWriter srWrite = new StreamWriter(fsTxtWrite, System.Text.Encoding.Default);

               srWrite.Write(sbNewSave.ToString().Trim());

               srWrite.Close();
               srWrite.Dispose();
               fsTxtWrite.Dispose();

           }
           catch (Exception ex)
           {
               //MessageBox.Show(ex.Message);

               #region ### error info
               try
               {
                   string sFolder = Directory.GetParent(sFileName).ToString();
                   string sErrFullName = sFolder + "_err_" + System.DateTime.Now.ToString("yyyyMMddHHmmss") + ".txt";
                   if (!System.IO.File.Exists(sErrFullName))
                   {
                       FileStream fs;
                       fs = File.Create(sErrFullName);

                       StreamWriter srWrite = new StreamWriter(fs, System.Text.Encoding.UTF8);

                       srWrite.Write(sFileName);

                       srWrite.Close();
                       srWrite.Dispose();

                       fs.Close();
                   }
               }
               catch (Exception ex2)
               { }
               #endregion ###error

           }
       }