Man*_*uel 1 c# split text-files
所以当我检查是否创建了数组"vetorUtilizadores"时,我有这个代码可以正常工作,但它以某种方式使我的字符串"linha"为null,这给了我一个错误:"对象引用没有设置为对象".这是一个截图:https://imgur.com/a/9LK2p(当然是测试数据)
string linha = "";
string login = @"utilizadores.txt";
StreamReader sr = File.OpenText(login);
while(linha != null)
{
linha = sr.ReadLine();
string[] vetorUtilizadores = linha.Split(';');
}
Run Code Online (Sandbox Code Playgroud)
(对不起,如果我在这篇文章上做错了什么,对这些类型的论坛有点新意.)
在最后通过循环时间,代码首先检查null,但发现的值.然后它从文件中读取并返回null到linha变量.接下来它会尝试拆分null字符串,这会导致错误.最后(假设您捕获异常)它将返回循环的开头并null再次检查.这次它会找到null并退出循环.
要解决此问题,您需要在检查null之前从文件中读取.您可以使用此模式:
string login = @"utilizadores.txt";
using (StreamReader sr = File.OpenText(login))
{
string linha = sr.ReadLine();
while(linha != null)
{
string[] vetorUtilizadores = linha.Split(';');
linha = sr.ReadLine();
}
}
Run Code Online (Sandbox Code Playgroud)
或这种模式:
string linha = "";
string login = @"utilizadores.txt";
using (StreamReader sr = File.OpenText(login))
{
while((linha = sr.ReadLine()) != null)
{
string[] vetorUtilizadores = linha.Split(';');
}
}
Run Code Online (Sandbox Code Playgroud)
请注意usingStreamReader周围添加了块.这非常重要.
您也可以使用此模式:
string login = @"utilizadores.txt";
var lines = File.ReadLines(login).Select(linha => linha.Split(';'));
Run Code Online (Sandbox Code Playgroud)
最后一个可能最终会让你编写这样的代码:
bool validAccount = lines.Any(x => x[0] == username && x[1] == password);
Run Code Online (Sandbox Code Playgroud)
这里真正好的是,如果您的用户是列表中的第一个人,那么该代码只会读取文件中的第一行.当然,如果它们根本不在列表中,它仍然需要读取整个文件,但至少你有机会节省一些磁盘I/O.
当然我假设这是学生代码.没有人真正在纯文本文件中保留用户名/密码列表.对?
| 归档时间: |
|
| 查看次数: |
80 次 |
| 最近记录: |