文件操作不会替换整行
本文关键字:替换 操作 文件 | 更新日期: 2023-09-27 18:34:03
我正在尝试用另一个文件行替换文件行。
这是我的代码块
string text = readWholeFile(fileName);
text = text.Replace(oldLine, newLine);
IsolatedStorageFile myStore = IsolatedStorageFile.GetUserStoreForApplication();
using (var isoFileStream = new IsolatedStorageFileStream(fileName,
FileMode.OpenOrCreate, FileAccess.Write, myStore))
{
using (var isoFileWriter = new StreamWriter(isoFileStream))
{
isoFileWriter.WriteLine(text);
isoFileWriter.Close();
}
isoFileStream.Close();
问题是 Line 只替换了换行符的确切数量。例如,如果 OldLine 是 1234567890
而 newLine 是 asd
。文件操作给出如下输出
asd
4567890
这里readWholeFile
方法读取整个文件。 和oldLine
,newLine
是方法字符串参数。
这段代码按预期工作:
string text = "1234567890'n1234567891'n1234567892";
var rText = text.Replace("1234567890", "asd");
Console.WriteLine(rText);
Console.ReadKey();
输出为:
asd
1234567891
1234567892
所以,很明显,你的问题不在于 String.Replace 方法。您可以使用简单的代码来"读取整个文件":
string[] text = File.ReadAllLines(filename);
StringBuilder str = new StringBuilder();
foreach (string s in text)
str.AppendNewLine(s);
比,
var rText = str.ToString().Replace(oldLine, newLine);
最后,再次将所有内容保存到文件中:
File.WriteAllText(outputFile, rText);
编辑
此外,以下代码有效:
string text = "1234567890'n1234567891'n1234567892";
var rText = text.ToString().Replace("1234567890", "asd");
using (var isoFileStream = new FileStream("output.txt",
FileMode.Create, FileAccess.Write))
{
using (var isoFileWriter = new StreamWriter(isoFileStream))
{
isoFileWriter.Write(rText);
}
}
正如预期的那样,输出为:
asd
1234567891
1234567892
但我发现以下原因导致了问题:
using (var isoFileStream = new FileStream("output.txt",
FileMode.OpenOrCreate, FileAccess.Write))
{
using (var isoFileWriter = new StreamWriter(isoFileStream))
{
isoFileWriter.Write(rText);
}
}
这导致问题的情况是,当文件已存在并具有以下内容时:
1234567890
1234567891
1234567892
文件中的输出为:
asd
1234567891
1234567892
67892
如果将文件模式更改为 File.Create,而不是 File.OpenOrCreate,则问题将消失。
编辑
我没有使用"IsolatedStorageFile",只是因为我没有在SilverLight上下文上进行测试,也没有使用ClickOnce进行部署,因此它不起作用。