我正在寻找一种在运行时获取平台行尾字符序列(CRLF用于Windows,LF用于Linux/macOS)的方法.

推荐答案

我不相信有任何功能专门做到这一点.即使是标准库的行识别功能也没有:BufRead::read_line被记录为只识别\n,而BufRead::lines (source)(go 除行尾字符)只识别\n\r\n,不区分在哪个平台上调用它.

不过,"站台线结尾"实际上是一个类别错误.文件通过网络发送,并从一台计算机复制到另一台计算机.如果你的程序在记事本中写入需要在Windows上打开的文件,那么生成这些文件的程序是在Windows上运行还是在Linux上运行并不重要;它需要排放\r\n.类似地,如果程序正在编写特定的文件格式或实现某种网络协议;格式或协议应该告诉您使用哪一行分隔符.如果格式允许,并且没有约定, Select 你喜欢的格式;坚持使用它.

如果你有reading个行尾,你可能应该容忍其中任何一个,就像BufRead::lines个一样.

然而,如果你想要,比如如果你的输出会被一个写得很差的程序读取,该程序在不同的平台上需要不同的行结束符,你可以使用conditional compilation个属性来实现这个效果:

#[cfg(windows)]
const LINE_ENDING: &'static str = "\r\n";
#[cfg(not(windows))]
const LINE_ENDING: &'static str = "\n";

Rust相关问答推荐

为什么在Rust struct 中只允许最后一个字段具有动态大小的类型

如何将`Join_all``Vec<;Result<;Vec<;Foo&>;,Anywhere::Error&>;`合并到`Result<;Vec<;Foo&>;,Anywhere::Error&>;`

值为可变对象的不可变HashMap

如何使用syn插入 comments ?

如果成员都实现特征,是否在多态集合上实现部分重叠的特征?

通过解引用将值移出Box(以及它被脱糖到什么地方)?

铁 rust 中的共享对象实现特征

像这样的铁 rust 图案除了‘选项’之外,还有其他 Select 吗?

Rust 的多态现象.AsRef与Derf

如何创建一个可变的嵌套迭代器?

返回迭代器考虑静态生命周期类型

Rust 为什么被视为borrow ?

如何将 &[T] 或 Vec<T> 转换为 Arc<Mutex<[T]>>?

我可以在 Rust 中 serde struct camel_case 和 deserde PascalCase

Rust 中的自动取消引用是如何工作的?

在 Rust 中使用 `SecTrustSettingsSetTrustSettings` 绑定导致 `errSecInternalComponent`

&str 的编译时拆分是否可能?

如何为返回正确类型的枚举实现 get 方法?

在 Rust 中获得准确时间的正确方法?

基于名称是否存在的条件编译