在文件末尾读取回车符

时间:2017-05-04 10:46:02

标签: c#

我正在编写验证类,以确保将有效文件发送到第三方软件。这些文件最后需要回车,但是当我读入它们以确保文件末尾有回车时,我使用的库忽略了最后一行。如果我在这一行中放置一个空格,它会读取它但是如果我不这样做则会被忽略。

我已尝试FileStream.ReadLinesStreamReaderStringReaderReadAllLines()使用这些类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...
}

数字是文件中的行,而不是文件中的行。

3 个答案:

答案 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。