1

我有一个名为 Load.txt 的文本文件,其中包含大约 200 行。我有一个复选框,如果选中,那么我想创建一个新文件,该文件只有 Load.txt 的前 100 行。我正在为这个程序使用 c#。实际上我真正的要求是我必须从第 110 行删除到第 201 行。我的代码在下面,由于某种原因,它从第 1 行删除到第 92 行。我不知道发生了什么。

            String line = null;

            String tempFile = Path.GetTempFileName();
            String filePath = saveFileDialog1.FileName;

            int line_number = 110;
            int lines_to_delete = 201;

            using (StreamReader reader = new StreamReader(sqlConnectionString))
            {
                using (StreamWriter writer = new StreamWriter(saveFileDialog1.FileName))
                {
                    while ((line = reader.ReadLine()) != null)
                    {
                        line_number++;

                        if (line_number <= lines_to_delete)
                            continue;

                        writer.WriteLine(line);
                    }
                }
            }

所以我想出了这个问题。但我的下一个问题是:我正在更新文本文件中的一些变量。在我的那个代码没问题之前。但现在该代码与我的删除行代码冲突。如果我能够删除行,那么我将无法更新这些变量。

我的代码是:

File.WriteAllLines(saveFileDialog1.FileName, System.IO.File.ReadLine(sqlConnectionString).Take(110));
File.WriteAllText(saveFileDialog1.FileName, fileContents);
4

3 回答 3

2
File.WriteAllLines("new.txt", File.ReadLines("Load.txt").Take(100));

更新后...

var desired = File.ReadLines("Load.txt")
                  .Take(110)  // "And I want to keep 1-110" -- OP
                  .Select(line => UpdateLine(line));  // "And I also want to update variables between 1-110" -- OP

File.WriteAllLines("new.txt", desired);

...

static string UpdateLine(string given)
{
     var updated = given;
     // other ops
     return updated;
}

MSDN 文件.WriteAllLines
MSDN文件.ReadLines

于 2013-05-02T15:05:01.263 回答
0

“我想创建一个只有前 100 行的新文件”

与您的原始模型保持一致,这是仅保留前 100 行的一种方法:

        int LinesToKeep = 100;
        using (StreamReader reader = new StreamReader(sqlConnectionString))
        {
            using (StreamWriter writer = new StreamWriter(saveFileDialog1.FileName))
            {
                for (int i = 1; (i <= LinesToKeep) && ((line = reader.ReadLine()) != null); i++)
                {
                    writer.WriteLine(line);
                }
            }
        }

“我真正的要求是我必须从第 110 行到第 201 行删除”

所以复制文件,但跳过第 110 到 201 行?

        int currentLine = 0;
        using (StreamReader reader = new StreamReader(sqlConnectionString))
        {
            using (StreamWriter writer = new StreamWriter(saveFileDialog1.FileName))
            {
                while ((line = reader.ReadLine()) != null)
                {
                    currentLine++;
                    if (currentLine < 110 || currentLine > 201)
                    {
                        writer.WriteLine(line);
                    }
                }
            }
        }
于 2013-05-02T15:58:38.090 回答
0

这应该可以完成您所需要的。它读取文本然后转储其中的 100 行。

     System.IO.File.WriteAllLines("newLoad.txt", System.IO.File.ReadLines("Load.txt").Take(100));
于 2013-05-02T15:22:30.910 回答