【发布时间】:2015-11-22 02:49:28
【问题描述】:
我正在尝试清理我每季度收到的一些文件。他们有一堆重复的标题,我想一次替换多个字符串值。我可以一次删除一个字符串,但我不明白如何流式传输文件并查看每一行并删除它是字符串 1 还是字符串 2。
每个文件至少有 100-30 万行,每次大约每季度一次将数据转储给我时,我会得到 10 到 50 个文件...如果他们不添加这些行会更容易,但是不是一个选项。
对于新手问题,我很抱歉,但我不经常编写代码。任何帮助表示赞赏...
static void Main(string[] args)
{
string tempFile = Path.GetTempFileName();
string t1 = "-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------";
string fName = "C:\\PoC\\test\\test.txt";
using (var sr = new StreamReader(fName))
using (var sw = new StreamWriter(tempFile))
{
string line;
while ((line = sr.ReadLine()) != null)
{
if (line.Contains(t1) == false)
{
sw.WriteLine(line);
}
}
sr.Close();
sw.Close();
}
File.Delete(fName);
File.Move(tempFile, fName);
}
【问题讨论】:
-
请记住,每次读取时,您都会将流位置移动到最后一个字节 read 和 writeline 方法将从该位置写入。我的建议是在读取一行后密切关注起始位置和新位置,并根据您的 if 条件用空格覆盖该范围。如果您想直接执行此操作,也可以在内存上构建一个新文件并覆盖整个文件。