我正在尝试删除两个不同行之间的行。目前,我有:
string s = "";
String path = @"C:\TextFile";
StreamWriter sw = new StreamWriter(path, true);
StreamReader sr = new StreamReader(path, true);
s = sr.ReadLine();
if (s=="#Start")
{
while (s != "#End")
{
sw.WriteLine(s);
//need something here to overwrite existing data with s not just add s
}
}
sr.Close();
sw.Close();
我的文本文件的内容如下:
#Start
facebook.com
google.com
youtube.com
#End
我尝试遵循Efficient way to delete a line from a text file,但是它会删除任何包含某个字符的文件,而在包含.com
的范围之外的其他行中,我不想删除
我想删除开始和结束之间的所有内容,因此在该方法运行后,文本文件的其余部分为
#Start
#End
答案 0 :(得分:0)
您有两个问题:
s == "#Start"
也不能满足条件s == "#End"
,等等。#End
之后不会有更多数据-您不会遍历其余各行,而只是停止写入。根据您的问题,我认为您想写入文件中的所有行,而只在#Start和#End之间进行更改。-
也许下面的恒定循环会更好吗?:
string s;
bool inRewriteBlock = false;
while ((s = sr.ReadLine()) != null)
{
if (s == "#Start")
{
inRewriteBlock = true;
}
else if (s == "#End")
{
inRewriteBlock = false;
}
else if (inRewriteBlock)
{
sw.WriteLine(s);
//need something here to overwrite existing data with s not just add s
}
else
{
sw.WriteLine(s);
}
}
默认情况下,代码将逐字读取输出的每一行。但是,如果读取的是#Start
,它将进入一种特殊的模式(inRewriteBlock == true
),您可以根据需要重写这些行。达到#End
后,它将转换回默认模式(inRewriteBlock == false
)。
答案 1 :(得分:0)
您应该检查并重写#Start和#End之间的所有内容,而不是文件仅以“ #Start”开始。
您可以尝试以下方法:
data.map(({ name, models }) => (
<React.Fragment>
<div>Name: { name }</div>
{
models.map(model => (
<div>{ model }</div>
))
}
</React.Fragment>
))
答案 2 :(得分:0)
您可以简单地执行以下操作:(这假定文件可以存储在内存中)
string path = @"C:\\Users\\test\\Desktop\\Test.txt";
List<string> fileData = File.ReadAllLines(path).ToList();
// File.ReadAllLines(path).ToList().Select(y => y.Trim()).ToArray().ToList(); will remove all trailing/preceding spaces in data
int startsWith = fileData.IndexOf("#Start");
int endsWith = fileData.IndexOf("#End");
if(startsWith != -1 && endsWith != -1)
fileData.RemoveRange(startsWith+1, endsWith-1);
File.WriteAllLines("C:\\Test\\Test1.txt", fileData.ToArray());
它不考虑特殊情况,例如startsWith位于文件末尾而没有endwith。