我有一个正在打开和阅读的文件。在此文件中,我有几个关键词,将用不同的数据库内容替换。
我的问题:我需要能够从读取的文件中删除特定的文本。不止一个字。我没有尝试过任何工作。完成后,.Remove方法将返回并清空文件。这是我的阅读器代码
using (StreamReader reader = File.OpenText(@"\\GTU-FS02\ScanTests\RLA.htm"))
{
/* Commented out. TRIED, but does not work
string fill = reader.ReadToEnd();
string toRemove = "GTU Renewal Application (a shorter, simplified renewal form)";
int i = fill.IndexOf(toRemove);
if (i > 1)
{
fill.Remove(i, toRemove.Length);
}
*/
string toRemove = "GTU Renewal Application (a shorter, simplified renewal form)";
string fill = reader.ReadToEnd();
string fill2 = null;
if (fill.Contains(toRemove))
{
fill2 = reader.ReadToEnd().Replace("UWNAME", UW).Replace("ClientFName", subFname).Replace("ExDate", ExpDate).Replace("UwEmail", UwEmail(UW))
.Replace("CinSured", client).Replace("&", amperSand).Replace(toRemove, "");
}
line = fill2;
}
您看到的是解决此问题的不同尝试。我可以轻松找到所需的内容,但是无法删除或替换文本。文本始终是相同的,所以我知道我可以那样找。有谁知道该怎么做?
答案 0 :(得分:0)
第一种方法(已注释的方法)由于字符串是不可变对象的简单原因而无法工作。 Remove方法返回一个新字符串,不更改调用该方法的字符串。因此,您的代码应使用
进行简单修复 line = fill.Remove(i, toRemove.Length);
第二种方法不起作用,因为您已两次调用ReadToEnd。因此,第二次流已到达文件末尾,并且无法读取fill2变量中的任何内容。只需删除第一个ReadToEnd,然后获取Replace调用的结果。 (再次字符串是不可变的,所有字符串方法都执行其任务并返回新字符串,而无需更改调用字符串)
string toRemove = "GTU Renewal Application (a shorter, simplified renewal form)";
string fill = reader.ReadToEnd();
if (fill.Contains(toRemove))
{
line = fill.Replace("UWNAME", UW)
.Replace("ClientFName", subFname)
.Replace("ExDate", ExpDate)
.Replace("UwEmail", UwEmail(UW))
.Replace("CinSured", client)
.Replace("&", amperSand)
.Replace(toRemove, "");
}
答案 1 :(得分:0)
我尝试过了,而且行得通。 https://dotnetfiddle.net/lxtVGN
检查reader.ReadToEnd();
回来了,
请勿使用null初始化字符串,而始终使用""
或String.Empty