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

How to remove specific number of line from existing file and create new text file

我有一个文本文件,它有 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 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);
                    }
                }
            }
        }
    }

读取和写入文本文件是编程的基本部分,您的问题缺乏任何尝试自行解决问题的证据。

需要考虑的几点。

1) 当您读取文本文件进行处理时,将批次加载到 String 个对象的数组中。在您处理它时源不会更改,因此无需保持 reader 打开文件句柄。

2) 从文件中删除内容是一种糟糕的方法,因为您在处理文件时可能会更改文件。这将导致问题,因为您当时正在枚举文件(假设您在循环中使用 reader)。

3)我的方法并不完美——如果_errorLine列表很长,源文件也很长,就会有很多调用来检查_errorLines列表是否包含一个特定的 String。会有更快的方法来做到这一点,但我没有时间做任何广泛的测试。

4) 作为第 3 点的后续内容,此代码未经过测试,可能需要稍作调整才能使其正常工作。

最后,在 SO 上发布问题时,表明您至少已尝试解决问题是比仅向我们提供一个骨架示例并要求我们为您完成工作更好的选择。

有关 reading/writing 来自文件的信息,请参阅以下页面。

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

https://msdn.microsoft.com/en-GB/library/ezwyzy7b.aspx

https://msdn.microsoft.com/en-GB/library/aa287548%28v=vs.71%29.aspx

试试这个:

    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);
                }
            }
        }
    }

如果要删除特定行数

string line;
int index = 0; // index line from file
while ((line = reader.ReadLine()) != null)
{
    if (!index++ != number) // number - it is your specific number of line from '0' to 'N' (for example 'number = 1' - write all lines except for line number one)
        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);
}