如何从跳过第1行的第2行开始读取文件。这似乎有效,但这是最好的方法吗?
using (StreamReader sr = new StreamReader(varFile, Encoding.GetEncoding(1250))) {
string[] stringSeparator = new string[] { "\",\"" };
int i = 0;
while (!sr.EndOfStream) {
string line = sr.ReadLine(); //.Trim('"');
if (i > 0) {
string[] values = line.Split(stringSeparator, StringSplitOptions.None);
for (int index = 0; index < values.Length; index++) {
MessageBox.Show(values[index].Trim('"'));
}
}
i++;
}
}
答案 0 :(得分:11)
如果文件不是很大并且可以放在内存中:
foreach (var line in File.ReadAllLines(varFile, Encoding.GetEncoding(1250)).Skip(1))
{
string[] values = line.Split(',');
...
}
如果没有写迭代器:
public IEnumerable<string> ReadAllLines(string filename, Encoding encoding)
{
using (var reader = new StreamReader(filename, encoding))
{
string line;
while ((line = reader.ReadLine()) != null)
{
yield return line;
}
}
}
然后消耗它:
foreach (var line in ReadAllLines(varFile, Encoding.GetEncoding(1250)).Skip(1))
{
string[] values = line.Split(',');
...
}
答案 1 :(得分:6)
你能不读取循环外的第一行而不将其赋值给变量?
using (StreamReader sr = new StreamReader(varFile, Encoding.GetEncoding(1250))) {
string[] stringSeparator = new string[] { "\",\"" };
if (!sr.EndOfStream)
sr.ReadLine();
while (!sr.EndOfStream) {
string line = sr.ReadLine(); //.Trim('"');
string[] values = line.Split(stringSeparator, StringSplitOptions.None);
for (int index = 0; index < values.Length; index++) {
MessageBox.Show(values[index].Trim('"'));
}
}
}
答案 2 :(得分:1)
我很抱歉,但我发现你的方式没有问题。我无法添加评论。
所以只是为了回答,你可能试着在循环之前调用ReadLine()
一次。可能不是最好的方式,因为我不知道运行ReadLine()的行为是否已经结束了流,但它什么都不会发生,那就可以省去一些检查。
<强>更新强>
为了给出更完整的答案,在流结束时调用ReadLine()将返回null。
参考:http://msdn.microsoft.com/en-us/library/system.io.streamreader.readline.aspx
请记住检查返回的空值。