我正在编写验证类,以确保将有效文件发送到第三方软件。这些文件最后需要回车,但是当我读入它们以确保文件末尾有回车时,我使用的库忽略了最后一行。如果我在这一行中放置一个空格,它会读取它但是如果我不这样做则会被忽略。
我已尝试FileStream.ReadLines
,StreamReader
,StringReader
和ReadAllLines()
使用这些类ReadAllText()
,ReadLines()
的所有方法, private void readfile()
{
string[] lines = System.IO.File.ReadAllLines(filePath + file);
bool error = ErrorValidatingLastLineOfFile(lines, lines.count());
}
private bool ErrorValidatingLastLineOfFile(string[] lines, int lastLine)
{
if (lines[lastLine - 1] != "")
return true;
return false;
}
等等。
任何人都知道解决这个问题的方法。到目前为止,我还没找到任何东西。
目前,这是我的代码行
1. [Section1]
2. Error =
3.
4. [Section2]
5. Error =
6.
7. [Data]
8. foo,bar,
9.
档案示例:
loadChart: function() {
...
var that = this;
$.ajax({
url:...,
data:....,
async: false,
success: function(data) {
try {
for (var i = 0; i < data.d.length; i++) {
// do something with data
}
that.function2();
} catch() {
....
}
}
});
},
function2: function() {
// do something...
}
数字是文件中的行,而不是文件中的行。
答案 0 :(得分:2)
使用System.IO.File.ReadAllText
。
例如:
var text = System.IO.File.ReadAllText(filePath + file);
var isValid = text.EndsWith("\n");
答案 1 :(得分:2)
我无法重现此行为。如果某行不包含任何内容,ReadAllLines
将返回一个空字符串:
File.WriteAllText("text.txt","a\n\n\n");
var lines=File.ReadAllLines("text.txt");
//The last line isn't ignored
Trace.Assert(lines.Length==3);
//The last line *is* empty
Trace.Assert(lines[2]=="");
Trace.Assert(lines[lines.Length -1]=="");
Trace.Assert(lines.Last()=="");
//So is any empty line
Trace.Assert(lines[2]=="");
原始代码正在检查错误的行 - 而不是最后一行(Length-1)
它检查前一行( (Length-1) -1)
,即Length -2
答案 2 :(得分:1)
也许你只需要检查CR(13)不是全行结束(CR + LF是13 + 10)。然后试试这个:
//read last char:
byte lastChar1 = System.IO.File.ReadAllBytes(filePath).Last();
//if a file is bigger, there is no need to read it all to just check the last char:
var fs = System.IO.File.OpenRead(filePath);
fs.Position = fs.Length-1;
var lastChar2 = fs.ReadByte();
fs.Close();
如果最后一个字符是CR,那么它应该是13。