C# Can';在输入文件中找不到字符串
我有一个文本文件,我正试图在其中插入一行代码。使用我的链接列表,我相信我可以避免将所有数据取出、排序,然后将其放入新的文本文件中。 我所做的是想出下面的代码。我设置了我的胸部,但仍然不起作用。我通过了调试器,它似乎正在通过整个列表(大约10000行),但没有发现任何内容是正确的,因此它没有插入我的代码 为什么或者这个代码有什么问题C# Can';在输入文件中找不到字符串,c#,streamreader,C#,Streamreader,我有一个文本文件,我正试图在其中插入一行代码。使用我的链接列表,我相信我可以避免将所有数据取出、排序,然后将其放入新的文本文件中。 我所做的是想出下面的代码。我设置了我的胸部,但仍然不起作用。我通过了调试器,它似乎正在通过整个列表(大约10000行),但没有发现任何内容是正确的,因此它没有插入我的代码 为什么或者这个代码有什么问题 List<string> lines = new List<string>(File.ReadAllLines("Students.txt")
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#,我就买了它…开始觉得这本书很好…不值得我花那么多钱买它。。…我正在尝试…仍然不起作用。我在想也许我必须写入一个新文件?我只是发誓我可以使用链接列表向其中添加内容,排序或不排序…至少添加。我正在尝试…仍然不起作用。我在想也许我必须写入一个新文件?我只是发誓我可以使用链接列表添加内容它的一些东西,排序或不…至少添加。