我正在嘗試使用 FileStream 和 StreamReader / StreamWriter 在 C# 中使用 .NET 5.0 修改 .ini 檔案。我只需要修改檔案的第一行,因此我將整個檔案讀入名為 的字串串列strList,修改第一行,然后將其全部寫回同一個檔案。
List<string> strList = new List<string>();
using (FileStream fs = File.OpenRead(@"C:\MyFolder\test.ini"))
{
using (StreamReader sr = new StreamReader(fs))
{
while (!sr.EndOfStream)
{
strList.Add(sr.ReadLine());
}
}
}
strList[0] = "test01";
using (FileStream fs = File.OpenWrite(@"C:\MyFolder\test.ini"))
{
using (StreamWriter sw = new StreamWriter(fs))
{
for (int x = 0; x < ewsLines.Count; x )
{
sw.WriteLine(strList[x]);
}
}
}
我遇到的問題是我將在檔案末尾的新行上添加新字符。我驗證了我從檔案中讀取的行數與檔案中的內容相匹配,并且 for 回圈僅將相同數量的行寫回檔案中。除了"test01"之外,我在撰寫其他字串時沒有任何問題。這個字串是唯一導致我剛才描述的問題的字串。它似乎是從最后一行中抓取字符,例如R或LAYERfrom MULTI_LAYER。
例 1:這個
S10087_U1
Cq4InEq=TRUE
XtrVer=5.5
IOCUPDATEMDB=TRUE
ARCHITECTURE=MULTI_LAYER
變成這個
test01
Cq4InEq=TRUE
XtrVer=5.5
IOCUPDATEMDB=TRUE
ARCHITECTURE=MULTI_LAYER
R
例 2:這個
test01 - Copy
Cq4InEq=TRUE
XtrVer=5.5
IOCUPDATEMDB=TRUE
ARCHITECTURE=MULTI_LAYER
ER
變成這個
test01
Cq4InEq=TRUE
XtrVer=5.5
IOCUPDATEMDB=TRUE
ARCHITECTURE=MULTI_LAYER
LAYER
用以下內容替換 StreamWriter 部分似乎可以解決問題,但我試圖弄清楚為什么使用 StreamWriter 不能像我預期的那樣作業。
File.WriteAllLines(@"C:\MyFolder\test.ini", strList);
uj5u.com熱心網友回復:
這是因為您正在使用File.OpenWrite. 從檔案中的注釋:
如果檔案路徑已經存在一個檔案,該
OpenWrite方法打開一個檔案,如果一個檔案不存在,則創建一個新檔案。對于現有檔案,它不會將新文本附加到現有文本。相反,它會用新字符覆寫現有字符。OpenWrite如果您用較短的字串(例如“Second run”)覆寫較長的字串(例如“This is a test of the method”),則檔案將包含字串的混合(“OpenWrite 方法的Second runtest” )。
雖然您可以更改您的代碼來File.Create代替使用,但我建議更顯著地更改代碼 - 不僅僅是寫作,還有閱讀:
string path = @"C:\MyFolder\test.ini";
var lines = File.ReadAllLines(path);
lines[0] = "test01";
File.WriteAllLines(path, lines);
這是做同樣事情的更簡單的代碼。
兩者之間的中途之家是使用File.OpenText(to return a StreamWriter) 和File.CreateText(to return a StreamWriter)。無需自己進行包裝。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/467141.html
上一篇:為什么這個計數函式會拋出錯誤“必須宣告標量變數“@MyColumn”。”C#
下一篇:基本回圈登錄選單
