我正在尝试用另一个替换文件行。
这是我的代码块
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只替换了newLine字符的确切数量。例如,如果OldLine是1234567890
而newLine是asd
。文件操作给出类似这样的输出
asd
4567890
此处readWholeFile
方法读取整个文件。和oldLine
,newLine
是方法字符串参数。
答案 0 :(得分:1)
这段代码按预期工作:
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.OpenOrCreate而是将文件模式更改为File.Create,则问题将消失。
修改强>
我之前没有使用过“IsolatedStorageFile”,因为我没有在SilverLight上下文测试,也没有使用ClickOnce进行部署,因此无法使用