嗨我有一个带有表架构和数据的文本文件,当用户检查不需要架构时,我需要删除架构并保留数据。我正在使用StreamReader读取文件并检查一个条件,它应该删除文件中的所有行,直到它满足我的条件。 如果我正在检查
,请说 using (StreamReader tsr = new StreamReader(targetFilePath))
{
do
{
string textLine = tsr.ReadLine() + "\r\n";
{
if (textLine.StartsWith("INSERT INTO"))
{
// It should leave these lines
// and no need to delete lines
}
else
{
// it should delete the lines
}
}
}
while (tsr.Peek() != -1);
tsr.Close();
请建议我如何删除行,并注意如果textline找到“InsertInto”,它不应该从那里删除任何内容。
答案 0 :(得分:6)
使用第二个文件,只放置所需的行,并在流程结束时删除原始文件并将新文件重命名为目标文件。
using (StreamReader tsr = new StreamReader(targetFilePath))
{
using (StreamWriter tsw = File.CreateText(targetFilePath+"_temp"))
{
string currentLine;
while((currentLine = tsr.ReadLine()) != null)
{
if(currentLine.StartsWith("A long time ago, in a far far away galaxy ..."))
{
tsw.WriteLine(currentLine);
}
}
}
}
File.Delete(targetFilePath);
File.Move(targetFilePath+"_temp",targetFilePath);
答案 1 :(得分:4)
你可以使用Linq:
File.WriteAllLines(targetFilePath, File.ReadAllLines(targetFilePath).Where(x => x.StartsWith("INSERT INTO")));
答案 2 :(得分:1)
您在文件中阅读的方式与您的方式相同。但是,如果该行不包含您要查找的内容,则只需跳过它即可。最后,无论您遗留哪些数据,都要写入新的文本文件。
private void button1_Click(object sender, EventArgs e)
{
StringBuilder newText = new StringBuilder();
using (StreamReader tsr = new StreamReader(targetFilePath))
{
do
{
string textLine = tsr.ReadLine() + "\r\n";
{
if (textLine.StartsWith("INSERT INTO"))
{
newText.Append(textLine + Environment.NewLine);
}
}
}
while (tsr.Peek() != -1);
tsr.Close();
}
System.IO.TextWriter w = new System.IO.StreamWriter(@"C:\newFile.txt");
w.Write(newText.ToString());
w.Flush();
w.Close();
}