none
請問txt關閉串流後再寫入資料的問題 RRS feed

  • 問題

  • 各位前輩好,我的程式目前想要創建一個新的txt,然後將匯入的txt讀取到特定字串停止,再寫入我的內容,例如原本的檔案有

    $ LINK PROPERTIES
      LINKPROP  "NLPR1"  TYPE "DAMPER"
      LINKPROP  "NLPR1"  DOF "U1"

    $ FRAME HINGE PROPERTIES
      HINGE "B1"  TYPE "M3" SYMMETRIC "YES"  
      HINGE "B1"  TYPE "M3"  B "0 1"  C "0.018 1.25"  D "0.018 0.4"  E "0.02 0.4"
      HINGE "B1"  TYPE "M3"  MOMENTSFP 2000000  ROTATIONSFP 1
      HINGE "B1"  TYPE "M3"  IO 2  LS 4  CP 6

    $ PIER/SPANDREL NAMES 
      PIERNAME  "P1"  
      SPANDRELNAME  "S1" 

    這樣分別有三個標題,我寫的程式碼是,當讀取到$ FRAME HINGE PROPERTIES時關掉StreamWriter,但我想修改$ FRAME HINGE PROPERTIES以下的內容再將$ PIER/SPANDREL NAMES 之後的資料讀進去,我在這邊卡住了,請問我該如何改進,謝謝大家

    以下是我目前的程式碼

    FileStream newCreatTxt = new FileStream(@"C:\Users\Chun\Desktop\HINGE.txt", FileMode.Create);
                newCreatTxt.Close();
    
                using (StreamWriter sw = new StreamWriter(@"C:\Users\Chun\Desktop\HINGE.txt"))
                {
                    //string[] lines = File.ReadAllLines(_FilePathText);
                    string line = "";
                    StreamReader file_txt = new StreamReader(@"C:\Users\Chun\Desktop\MODEL.e2k", Encoding.Default);
                    while ((line = file_txt.ReadLine()) != null)
                    {
                        sw.WriteLine(line);
                        //Regex FirstStop = new Regex(@"\$\sPIER\/SPANDREL\sNAMES");  //$ PIER/SPANDREL NAMES
                        Regex FirstStop = new Regex(@"\$\sFRAME\sHINGE\sPROPERTIES");  //$ FRAME HINGE PROPERTIES
                        Match match1 = FirstStop.Match(line);
                        while (match1.Success)
                        {
                            sw.Close();
                        }
    
                    }
                }




    • 已編輯 ChrisChun 2017年10月7日 上午 05:42
    2017年10月7日 上午 05:36

所有回覆

  • 您可以考慮這樣做:

    string text = File.ReadAllText("test.txt");
    text = text.Replace("some text", "new value");
    File.WriteAllText("test.txt", text);

    2017年10月7日 上午 10:43
  • 不知道有沒有誤會你的意思,以下參考看看.

    延續你目前的部分

    1. 立新的B檔案,並開始讀取A檔案內容
    2. 讀取一行,並判斷是不是要開始更動的標籤.不是的話持續將內容寫入B檔案,是的話,繼續讀取A檔案,但是不寫入B檔案,寫入要替換的內容
    3. 替換內容寫入完畢後,繼續讀取A檔案,判斷是不是讀取要要回復寫入的標籤,是的話,開始將資料輸出到B檔案


    <b>請注意討論區相關規則,良好的討論環境需要大家共同努力、遵守</b>

    2017年10月7日 下午 02:42
  • .Net 在 WinForm 預設是在軟體關閉時,才會釋放鎖定,要提早釋放檔案鎖定,你要自行呼叫:

    FileStream.Dispose


    不精確的問法,就會得到隨便猜的答案;自己都不肯花時間好好描述問題,又何必期望網友會認真回答?

    2017年10月7日 下午 03:41