StreamReader sr = new StreamReader(path);
String contents = "LINE";
while (!string.IsNullOrWhiteSpace(contents))
{
contents = sr.ReadLine();
foreach (TSPlayer plr in newPlayers.Keys)
{
if (plr.Name.ToLower() == contents.ToLower() || plr.UserAccountName.ToLower() == contents.ToLower())
{
TShock.Utils.ForceKick(plr, "Bad name. GO AWAY!");
newPlayers.Remove(plr);
}
}
}
sr.Close();
我正在从包含4行的文本文件中读取所有内容(无空白行)。上面的while循环只读取文件中的前2个值然后停止。
我在'\ n'分割文件内容后尝试使用常规For循环和Foreach循环,但同样的事情发生了。
我不知道为什么会这样。我确定该数组有4个元素,因为我在索引处手动显示了值(例如content [2])。所以它正确地从文件中读取。
只要我尝试访问它停止的第三个值。
感谢您的帮助,非常感谢。
答案 0 :(得分:4)
返回值
类型:System.String
输入流的下一行,如果到达输入流的末尾,则为null。
https://msdn.microsoft.com/en-us/library/system.io.streamreader.readline(v=vs.110).aspx
你拥有的是
while (!string.IsNullOrWhiteSpace(contents))
{
contents = sr.ReadLine();
如果文件的第3行只是空格,那么你的循环将退出,应该是什么只是
while (contents != null)
答案 1 :(得分:0)
您可能在行while (!string.IsNullOrWhiteSpace(contents))
中遇到逻辑问题。我怀疑你有空白。
您的代码中也存在一个逻辑问题,即在您退出之前有null
或空格时,它必须通过一个外观运行。
最好避免使用这种循环并使用LINQ编写代码。
试试这个:
var lines = new HashSet<string>(
File
.ReadAllLines(path)
.Select(line => line.Trim().ToLower())
.Where(line => !string.IsNullOrWhiteSpace(line)));
var matches =
from plr in newPlayers
let name = plr.Key.Name.ToLower()
let userAccountName = plr.Key.UserAccountName.ToLower()
where lines.Contains(name) || lines.Contains(userAccountName)
select plr.Key;
foreach (var plr in matches.ToArray())
{
TShock.Utils.ForceKick(plr, "Bad name. GO AWAY!");
newPlayers.Remove(plr);
}