在输入文件中找不到字符串

本文关键字:找不到 字符串 文件 输入 | 更新日期: 2023-09-27 18:36:28

我有一个文本文件,我正在尝试在其中插入一行代码。使用我的链接列表,我相信我可以避免将所有数据取出,对其进行排序,然后将其制作成一个新的文本文件。我所做的是想出下面的代码。我设置了我的布尔值,但它仍然不起作用。我通过调试器,似乎正在发生的事情是它正在浏览整个列表(大约 10,000 行),并且没有发现任何真实的东西,所以它没有插入我的代码。

为什么或这个代码有什么问题?

List<string> lines = new List<string>(File.ReadAllLines("Students.txt"));

 using (StreamReader inFile = new StreamReader("Students.txt", true))
 {
    string newLastName = "'Constant";
    string newRecord = "(LIST (LIST 'Constant 'Malachi 'D ) '1234567890 'mdcant@mail.usi.edu 4.000000 )";
    string line;
    string lastName;
    bool insertionPointFound = false;
    for (int i = 0; i < lines.Count && !insertionPointFound; i++)
    {
        line = lines[i];
        if (line.StartsWith("(LIST (LIST "))
        {
            values = line.Split(" ".ToCharArray());
            lastName = values[2];
            if (newLastName.CompareTo(lastName) < 0)
            {
                lines.Insert(i, newRecord);
                insertionPointFound = true;
            }
        }
    }
    if (!insertionPointFound)
    {
        lines.Add(newRecord);
    }

在输入文件中找不到字符串

您只是将文件读入内存,而不是将其提交到任何地方。

恐怕您将不得不加载并完全重写整个文件。 文件支持追加,但不支持插入。

您可以像读取文件一样写入文件

string[] lines;
/// instanciate and build `lines`
File.WriteAllLines("path", lines);

WriteAllLines也需要一个IEnumerable,所以如果你愿意,你可以把一List串子放进去。


还有一个问题:看起来好像您正在阅读文件两次。 一个用ReadAllLines,另一个用你的StreamReader.

至少有四种可能的错误。

  • 不需要打开流阅读器,您已经阅读了所有的台词。(好吧,这不是一个真正的错误,但是...
  • 如果您以空白开头的行,则可能会欺骗对 StartsWith 的检查空格,您将错过插入点。(添加修剪将消除此处的任何问题)
  • 在 CompareTo 行中,您检查<0,但您应该检查 == 0。但是,如果字符串等效,则比较返回 0.....
  • 要检查两个字符串是否相等,您应该避免使用 CompareTo as在上面的 MSDN 链接中进行了说明,但使用字符串。等于

    List<string> lines = new List<string>(File.ReadAllLines("Students.txt"));
    string newLastName = "'Constant";
    string newRecord = "(LIST (LIST 'Constant 'Malachi 'D ) '1234567890 'mdcant@mail.usi.edu 4.000000 )";
    string line;
    string lastName;
    bool insertionPointFound = false;
    for (int i = 0; i < lines.Count && !insertionPointFound; i++)
    {
        line = lines[i].Trim();
        if (line.StartsWith("(LIST (LIST "))
        {
            values = line.Split(" ".ToCharArray());
            lastName = values[2];
            if (newLastName.Equals(lastName))
            {
                lines.Insert(i, newRecord);
                insertionPointFound = true;
            }
        }
     }
     if (!insertionPointFound)
         lines.Add(newRecord);
    

我没有将丢失的写回文件列为错误。希望您刚刚省略了代码的那部分。否则这是一个非常简单的问题。(但是我认为使用CompareTo的方式可能是您问题的主要原因)

编辑 查看您在下面的评论,似乎Sam I Am的答案适合您。当然,您需要写回修改后的行数组。所有更改都是对内存中的行数组进行的,如果没有写入文件的代码,则不会将任何内容写回文件。但是您不需要新文件

File.WriteAllLines("Students.txt", lines);