如何检测文件是否包含Unix换行符(\n)或Windows换行符(\ r \n)?

fre*_*shr 8 c# windows file-io newline

我正在通过FileStream改变文件(它是一个非常大的文件,我只需要改变标题而不重写整个文件.

该文件可以有Unix或Windows换行符,对我来说知道哪些是很重要的,这样我在更新时就可以将正确的换行符写回文件中.

我可以编写一个简单的函数来使用FileStream来读取块中的文件并检查换行符.

但是这个问题必须先解决,如果不是在C#中,那么在Win32 API中呢?

检测文件换行方式的最有效方法是什么?

fre*_*shr 4

感谢大家的建议。我很惊讶没有找到易于重用的东西,因此我创建了一个简单的函数,并将其包含在此处。请注意,它只是查找第一个换行符(\n 或 \r\n)并将其作为匹配项返回。足以满足我的需求,但可能不够强大。

    public bool TryDetectNewLine(string path, out string newLine)
    {
        using (var fileStream = File.OpenRead(path))
        {
            char prevChar = '\0';

            // Read the first 4000 characters to try and find a newline
            for (int i = 0; i < 4000; i++)
            {
                int b;
                if ((b = fileStream.ReadByte()) == -1) break;

                char curChar = (char)b;

                if (curChar == '\n')
                {
                    newLine = prevChar == '\r' ? "\r\n" : "\n";
                    return true;
                }

                prevChar = curChar;
            }

            // Returning false means could not determine linefeed convention
            newLine = Environment.NewLine;
            return false;
        }
    }
Run Code Online (Sandbox Code Playgroud)