在C#中将文件中的行末格式从DOS转换为UNIX格式

3

我希望能够在C#中将文件中的行结尾从DOS格式转换为Unix格式。

Unix系统使用换行符(LF)作为行分隔符。唯一的例外是微软Windows,它使用回车符后跟换行符(CRLF)。

如何使用C#将文件中的行结尾从DOS格式更改为Unix格式?需要一些转换指导。


2
String.Replace("\r\n","\n"); 可能是这样吗? - Tim
1个回答

5

以下是您需要的答案:将文件从Dos转换为Unix及其反向操作。

private void Dos2Unix(string fileName)
{
    const byte CR = 0x0D;
    const byte LF = 0x0A;
    byte[] data = File.ReadAllBytes(fileName);
    using (FileStream fileStream = File.OpenWrite(fileName))
    {
        BinaryWriter bw = new BinaryWriter(fileStream);
        int position = 0;
        int index = 0;
        do
        {
            index = Array.IndexOf<byte>(data, CR, position);
            if ((index >= 0) && (data[index + 1] == LF))
            {
                // Write before the CR
                bw.Write(data, position, index - position);
                // from LF
                position = index + 1;
            }
        }
        while (index >= 0);
        bw.Write(data, position, data.Length - position);
        fileStream.SetLength(fileStream.Position);
    }
}

一个缺点是:它会将整个文件读入内存(虽然只有一次),而 String.Replace 则会创建两个完整的副本(旧的和新的)。 - ivan_pozdeev
while循环部分应设置为:while (index >= 0);,因为文件可以以空行(以回车符开头)开头。当它找不到更多时,索引将为-1,这将正确停止循环。 - OwN

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接