所以我试图从txt文件中读取文本,然后将文本添加到自定义类列表中,
代码是
public static List<BookInfo> LoadCSVFile(string fileName, out string qError)
{
qError = "";
fileName = "books.txt";
List<BookInfo> Book_Info = new List<BookInfo>();
StreamReader read = null;
try
{
read = new StreamReader(fileName);
while (!read.EndOfStream)
{
string line = read.ReadLine();
string[] values = line.Split(',');
if (values.Length == 3)
{
string Title = values[0].Trim();
string Author = values[1].Trim();
string ISBN = values[2].Trim();
try
{
Book_Info.Add(new BookInfo(Title, Author, ISBN));
}
catch (Exception ex)
{
qError = ex.Message;
return null;
}
}
else
{
qError = $"line {line} was unable to be read";
return null;
}
}
}
catch
{
qError = $"failed to open file: {fileName}";
return null;
}
finally
{
if (read != null)
{
read.Close();
}
}
if (qError == "")
{
return Book_Info;
}
return null;
}
一旦我阅读了文本,它将以我认为正确编码的形式显示
我放置了一条错误消息,以显示何时已读取文件,并且每次尝试新操作都会出现相同的错误。
阅读txt文件时我在哪里出错了?
编辑:
文本文件是使用Visual Studio创建的,并且在相同的解决方案中,文本文件位于bin / debug中
答案 0 :(得分:3)
我完全同意将军的回答,但是要回答您的第一个问题,我怀疑您的books.txt文件不在您的Bin/Debug文件夹中。 I did test your code ;-P
答案 1 :(得分:2)
一些笔记
如果您要使用实现IDisposable
的东西,那么使用using
语句
如果这只是一个小文件,当您仅可以使用File.ReadAllLines
StreamReader
Linq是你的朋友,投射是一件很了不起的事。
如果您真的想解析CSV,请认真考虑专用的CSV解析器库(例如CsvHelper),它将为您省去很多麻烦,很多很多
这并不是完美编码的堡垒,但是我尝试着与您所拥有的以及您所尝试的精神一起工作。
某些Codez
public static List<BookInfo> LoadCSVFile(string fileName, out string qError)
{
try
{
// read all lines in to another type
// just makes it easier for errors which you seem to want
var lines = File.ReadAllLines(fileName)
.Select(x => new { Values = x.Split(','), Text = x })
.ToList();
// get a list of errors,
var errors = lines.Where(x => x.Values.Length != 3)
.Select((s, i) => $"Bad book! Line {i} : {s.Text}");
// return some errors
qError = string.Join(Environment.NewLine, errors);
// project lines to your books
return lines.Where(x => x.Values.Length == 3)
.Select(x => new BookInfo(x.Values[0], x.Values[0], x.Values[0]))
.ToList();
}
catch (Exception e)
{
qError = e.Message;
}
return null;
}
免责声明