C ++从文本文件中检查OS

时间:2014-10-13 16:20:41

标签: c++ linux windows macos dos

如何检查使用哪个操作系统创建文本文件?我有4个文本文件,它们来自Mac,Win,Linux和Dos。如果它们是混合的,如何检查哪个文件来自win,mac,linux和dos OS?我知道如何检查ifdefine和ech等宏,但如何从txt文件中检测?感谢

2 个答案:

答案 0 :(得分:2)

一种方法是查看文件的行结尾。您可以区分Windows / DOS,Unix / Linux(包括Mac OS X)和Mac OS 9以及较低的行结尾。

  • Windows / DOS:行结尾的CRLF字符
  • Unix / Linux(OS X):行尾的LF字符
  • Mac OS 9及更低版本:行结尾的CR字符

这并不保证文件实际上是在这些平台上创建的,因为可以使用各种编辑器在任何现代操作系统上创建具有任何这些行结尾的文件,但是它可能足以满足您的需要。

有关更多信息,请参阅有关行结尾的Wiki文章:http://en.wikipedia.org/wiki/Newline

答案 1 :(得分:1)

没有将行结束约定与平台进行一对一映射。例如,GNU / Linux和Mac OS X都使用LF作为换行符。但作为经验法则:

  • 如果LF前面有CR,则该文件使用DOS行结束约定(Windows)
  • 如果行由唯一的LF分隔,则使用Unix行结束约定(Linux / Mac OS X)
  • 最高版本9的Mac OS使用了唯一的CR

您可以在此处找到广泛的平台列表及其行结尾约定:http://en.wikipedia.org/wiki/Newline