C# 如何从现有文件中删除特定行数并创建新文本文件

C# 如何从现有文件中删除特定行数并创建新文本文件,c#,text-files,read-write,C#,Text Files,Read Write,我有一个文本文件,它有n行,我从现有文件中提取了几行(假设10行)。现在我想从现有文件中删除这10行,并在删除这10行之后使用所有现有数据创建新文件 private void ReWriteFile(string NewFileName) { List<string> linetoDelete = _errorLine; using (StreamReader reader = new StreamReader(_fileName))

我有一个文本文件,它有n行,我从现有文件中提取了几行(假设10行)。现在我想从现有文件中删除这10行,并在删除这10行之后使用所有现有数据创建新文件

 private void ReWriteFile(string NewFileName)
 {            
    List<string> linetoDelete = _errorLine;

    using (StreamReader reader = new StreamReader(_fileName))
    {
       using (StreamWriter writer = new StreamWriter(NewFileName))
       {
               // reading the old file remove the error line and create new file                   

        }
     }
 }
private void重写文件(字符串NewFileName)
{            
列表行删除=\u错误行;
使用(StreamReader=新StreamReader(_文件名))
{
使用(StreamWriter=newstreamwriter(NewFileName))
{
//读取旧文件删除错误行并创建新文件
}
}
}
请帮我举个例子

private void重写文件(字符串NewFileName){
    private void ReWriteFile(string NewFileName) {

        List<String> _errorLine = new List<string>() {
            "Error Line 1", "Error Line 2"
        };

        String _fileName = "InputFile.txt";
        String _outputFile = NewFileName;

        List<string> linetoDelete = _errorLine;


        String[] sourceLines = File.ReadAllLines(_fileName);

        if (sourceLines.Length > 0) {
            using (StreamWriter writer = new StreamWriter(_outputFile)) {
                foreach(String line in sourceLines) {
                    if (!_errorLine.Contains(line)) {
                        writer.WriteLine(line);
                    }
                }
            }
        }
    }
列表_errorLine=新列表(){ “错误行1”,“错误行2” }; 字符串_fileName=“InputFile.txt”; 字符串_outputFile=NewFileName; 列表行删除=\u错误行; String[]sourceLines=File.ReadAllLines(\u文件名); 如果(sourceLines.Length>0){ 使用(StreamWriter writer=newstreamwriter(_outputFile)){ foreach(源代码行中的字符串行){ 如果(!\u errorLine.Contains(line)){ writer.WriteLine(行); } } } } }
对文本文件的读写是编程的一个基本部分,您的问题缺乏任何证据表明您试图自己解决这个问题

几点要考虑。

1) 读取文本文件进行处理时,将批次加载到
String
对象数组中。在您处理源文件时,源文件不会更改,因此不需要让一个读卡器保持打开状态并在文件上保留句柄

2) 从文件中删除内容是一种不好的方法,因为在处理文件时可能会更改文件。这将导致在枚举文件时出现问题(假设在循环中使用读取器)

3) 我的方法并不完美-如果
\u errorLine
列表很长,并且源文件也很长,那么会有很多调用来检查
\u errorLine
列表是否包含特定的
字符串。有一种更快的方法可以做到这一点,但我没有时间做任何广泛的测试

4) 作为第3点的后续内容,此代码未经测试,可能需要进行少量调整才能正常工作

最后,在SO上发布问题时,显示您至少已尝试解决问题,这比给我们一个基本示例并要求我们为您完成工作要好

有关从文件读取/写入的信息,请参阅以下页面

我见过很多刚毕业的程序员,他们不能像这样编写基本的IO函数,这有点令人不安

试试这个:

    private void ReWriteFile(string _newFileName)
    {
        List<string> linetoDelete = _errorLine;

        using (StreamReader reader = new StreamReader(_fileName))
        {
            using (StreamWriter writer = new StreamWriter(_newFileName))
            {
                string line;
                while ((line = reader.ReadLine()) != null)
                {
                    if(!linetoDelete.Contains(line))
                        writer.WriteLine(line);
                }
            }
        }
    }
如果要删除多行:

List<int> numberOfDeleteLines =  new List<int>() { 1, 2, 3 };
...
string line;
int index = 0;
while ((line = reader.ReadLine()) != null)
{
    if (!numberOfDeleteLines.Contains(index++))
        writer.WriteLine(line);
}
List numberOfDeleteLines=newlist(){1,2,3};
...
弦线;
int指数=0;
而((line=reader.ReadLine())!=null)
{
如果(!numberOfDeleteLines.Contains(index++))
writer.WriteLine(行);
}

我不明白。你的代码到底有什么问题?谢谢你的解释,我从来没有对读/写文件感兴趣,这让我的生活有些困难。这就是问题所在。当我开始编程时,它是在Atari ST上,然后是DOS的Basic。用低级语言读写文件是一个基础,每个程序员都应该理解,没有例外。在现代环境中,文件访问对于分析日志文件和处理配置文件至关重要,不知道如何正确地做这件事显示了知识上的差距,必须加以填补。这就好像大学只教授高水平的理论废话,却没有教授像
HelloWorld
这样的基础知识。我们从HelloWorld开始模拟彩票结果。如果那时我没有12年的业余编程背景(以及2年的专业编程背景),我会遇到真正的问题。
List<int> numberOfDeleteLines =  new List<int>() { 1, 2, 3 };
...
string line;
int index = 0;
while ((line = reader.ReadLine()) != null)
{
    if (!numberOfDeleteLines.Contains(index++))
        writer.WriteLine(line);
}