Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Can';在输入文件中找不到字符串_C#_Streamreader - Fatal编程技术网

C# Can';在输入文件中找不到字符串

C# Can';在输入文件中找不到字符串,c#,streamreader,C#,Streamreader,我有一个文本文件,我正试图在其中插入一行代码。使用我的链接列表,我相信我可以避免将所有数据取出、排序,然后将其放入新的文本文件中。 我所做的是想出下面的代码。我设置了我的胸部,但仍然不起作用。我通过了调试器,它似乎正在通过整个列表(大约10000行),但没有发现任何内容是正确的,因此它没有插入我的代码 为什么或者这个代码有什么问题 List<string> lines = new List<string>(File.ReadAllLines("Students.txt")

我有一个文本文件,我正试图在其中插入一行代码。使用我的链接列表,我相信我可以避免将所有数据取出、排序,然后将其放入新的文本文件中。 我所做的是想出下面的代码。我设置了我的胸部,但仍然不起作用。我通过了调试器,它似乎正在通过整个列表(大约10000行),但没有发现任何内容是正确的,因此它没有插入我的代码

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

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);
    }
List line=新列表(File.ReadAllLines(“Students.txt”);
使用(StreamReader infle=newstreamreader(“Students.txt”,true))
{
字符串newLastName=“'Constant”;
string newRecord=“(列表(列表“常量”Malachi“D)”1234567890”mdcant@mail.usi.edu 4.000000 )";
弦线;
字符串lastName;
bool insertionPointFound=false;
对于(int i=0;i
您只是将文件读入内存,而不是将其提交到任何地方

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

您可以用与读取文件相同的方式写入文件

string[] lines;
/// instanciate and build `lines`
File.WriteAllLines("path", lines);
writeAllines
还需要一个
IEnumerable
,因此如果需要,可以将
列表
中的字符串放入其中



还有一个问题:似乎您正在读取文件两次。一次是使用
ReadAllLines
,另一次是使用
StreamReader

,您只是将文件读取到内存中,而不是将其提交到任何位置

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

您可以用与读取文件相同的方式写入文件

string[] lines;
/// instanciate and build `lines`
File.WriteAllLines("path", lines);
writeAllines
还需要一个
IEnumerable
,因此如果需要,可以将
列表
中的字符串放入其中



还有一个问题:您似乎正在读取文件两次。一个是使用
ReadAllLines
,另一个是使用
StreamReader
,至少有四个可能的错误

  • 不需要打开streamreader,您已经阅读了 所有的行。(其实不是一个错误,但是…)
  • 如果您的行以空白开头,则StartsWith的检查可能会被愚弄 空格,您将错过插入点。(添加修剪将消除此处的任何问题)
  • 在检查<0但应检查==0的行中。如果字符串相等,则CompareTo返回0
  • 要检查两个字符串是否相等,应避免使用CompareTo作为 在上面的MSDN链接中解释,但使用string.Equals

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

    至少有四种可能的错误

    • 不需要打开streamreader,您已经阅读了 所有的行。(其实不是一个错误,但是…)
    • 如果您的行以空白开头,则StartsWith的检查可能会被愚弄 空格,您将错过插入点。(添加修剪将消除此处的任何问题)
    • 在检查<0但应检查==0的行中。如果字符串相等,则CompareTo返回0
    • 要检查两个字符串是否相等,应避免使用CompareTo作为 在上面的MSDN链接中解释,但使用string.Equals

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

      嗯……是的,我很害怕……我要试着看看我能用一种附加的方法做些什么,写一个全新的文件,然后阅读新的文件。这是我从一个庭院拍卖会上买的一本书的练习。就因为上面有c,我就买了它……开始觉得这本书很好……不值得我为此付出的几美元。。。.Eww…是的,我很害怕…我要试试看我能用一种附加方法做些什么,写一个全新的文件,然后读新的文件。这是我从一个庭院拍卖会上买的一本书的练习。就因为上面有c#,我就买了它…开始觉得这本书很好…不值得我花那么多钱买它。。…我正在尝试…仍然不起作用。我在想也许我必须写入一个新文件?我只是发誓我可以使用链接列表向其中添加内容,排序或不排序…至少添加。我正在尝试…仍然不起作用。我在想也许我必须写入一个新文件?我只是发誓我可以使用链接列表添加内容它的一些东西,排序或不…至少添加。