【问题标题】:Deleting some content from the text file in c#在c#中从文本文件中删除一些内容
【发布时间】:2013-05-03 01:12:56
【问题描述】:

我有一个名为 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);

【问题讨论】:

  • 到目前为止你尝试过什么?
  • -1 这么简单的问题就不用谷歌了
  • 为什么要读取存储在sqlConnectionString 中的文件名?适当地命名你的变量。

标签: c# winforms checkbox text-files


【解决方案1】:
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 File.WriteAllLines
MSDN File.ReadLines

【讨论】:

  • 现在我的代码没有删除我想要的行,我的意思是在 110 之后。但它能够更新 110 行之后的变量,而不是 110 之前的那个。所以我想从第 1-110 行并删除 110 之后的所有行。
  • @JaspreetkaurDeol:您的问题是 我想删除第 110 到 200 行,但您在此处声明您希望删除第 110 行之后的所有内容 - 是什么? “load.txt”中有多少行,你想保留哪些行?
  • 好的,所以我有一个在 load.txt 中有 201 行的文件。我想从 110-201 中删除行。而且我还想更新1-110之间的变量。我想保留1-110。
  • 感谢 Austin,我正在文件中更新这样的变量。做这样的事情 var fileContents = System.IO.File.ReadAllText(SqlconnectionString); fileContents = fileContents.Replace("{param_1}", textBox1.Text.ToString());我想知道如何将其与您更新的代码联系起来。很抱歉打扰您。其实我是 C# 新手
  • @JaspreetkaurDeol:您可以将该代码放在UpdateLine 方法中。您应该使用调试器单步执行此代码,看看是否有什么能激发您的灵感。
【解决方案2】:

这应该可以满足您的需求。它读取文本然后转储 100 行。

     System.IO.File.WriteAllLines("newLoad.txt", System.IO.File.ReadLines("Load.txt").Take(100));

【讨论】:

  • 实际上我也替换了文本文件中的一些内容。现在我的问题是,如果我从文本文件中删除一些行,那么文件的其余部分不会得到更新。
  • 这里是冲突的代码: File.WriteAllText(saveFileDialog1.FileName, fileContents); File.WriteAllLines(saveFileDialog1.FileName,System.IO.File.ReadLines(connectionString).Take(110));
【解决方案3】:

“我想创建一个只有前 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);
                    }
                }
            }
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-18
    • 2019-02-18
    • 2014-07-19
    • 2014-09-02
    • 1970-01-01
    相关资源
    最近更新 更多