Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows和Linux之间的行尾分隔符转换 我需要阅读一个在Windows中用C++编写的TXT文件,编译在Debian Linux上。不幸的是,我的行尾分隔符有问题。我知道,在Linux和Windows中,行尾指示器是不同的。因此,在Linux中,我的C++程序读取了一些类似的“改正”。_C++_Linux - Fatal编程技术网

Windows和Linux之间的行尾分隔符转换 我需要阅读一个在Windows中用C++编写的TXT文件,编译在Debian Linux上。不幸的是,我的行尾分隔符有问题。我知道,在Linux和Windows中,行尾指示器是不同的。因此,在Linux中,我的C++程序读取了一些类似的“改正”。

Windows和Linux之间的行尾分隔符转换 我需要阅读一个在Windows中用C++编写的TXT文件,编译在Debian Linux上。不幸的是,我的行尾分隔符有问题。我知道,在Linux和Windows中,行尾指示器是不同的。因此,在Linux中,我的C++程序读取了一些类似的“改正”。,c++,linux,C++,Linux,我的问题是:如何在Linux中正确读取在Windows中创建的文件? 我是否需要手动将其转换为Linux表示(我希望避免) 谢谢。您可以运行dos2unix。它将转换您的文件。您可以运行dos2unix。它将转换您的文件。您必须自己进行转换。(不,一个好的图书馆可以做到这一点 如果以文本模式打开,则在filebuf中自动打开。但是 我对你很熟悉 取决于你在做什么,这可能无关紧要。任何面向行的 不管怎样,输入都应该接受尾随空格,以及额外的0x0D 字符是空白。所以除了编辑,它通常不会 重要 如果要

我的问题是:如何在Linux中正确读取在Windows中创建的文件? 我是否需要手动将其转换为Linux表示(我希望避免)


谢谢。

您可以运行
dos2unix
。它将转换您的文件。

您可以运行
dos2unix
。它将转换您的文件。

您必须自己进行转换。(不,一个好的图书馆可以做到这一点 如果以文本模式打开,则在
filebuf
中自动打开。但是 我对你很熟悉

取决于你在做什么,这可能无关紧要。任何面向行的 不管怎样,输入都应该接受尾随空格,以及额外的0x0D 字符是空白。所以除了编辑,它通常不会 重要

如果要在写入文件时抑制额外的0x0D(在 Windows),只需以二进制模式打开文件。就这件事而言,什么时候 文件的可移植性是一个值得关注的问题,打开 以二进制模式创建文件,并写入协议中的任何约定 要求。(使用两个字符序列0x0D,0x0A或多或少 标准,并且是大多数互联网协议规定的。)阅读时, 同样,以二进制模式打开,并编写代码以接受 常用约定:两个字符序列0x0D、0x0A或 单个0x0D或单个0x0A。(这可以通过过滤来完成
你得自己动手。(不,一个好的图书馆可以做到这一点 如果以文本模式打开,则在
filebuf
中自动打开。但是 我对你很熟悉

取决于你在做什么,这可能无关紧要。任何面向行的 不管怎样,输入都应该接受尾随空格,以及额外的0x0D 字符是空白。所以除了编辑,它通常不会 重要

如果要在写入文件时抑制额外的0x0D(在 Windows),只需以二进制模式打开文件。就这件事而言,什么时候 文件的可移植性是一个值得关注的问题,打开 以二进制模式创建文件,并写入协议中的任何约定 要求。(使用两个字符序列0x0D,0x0A或多或少 标准,并且是大多数互联网协议规定的。)阅读时, 同样,以二进制模式打开,并编写代码以接受 常用约定:两个字符序列0x0D、0x0A或 单个0x0D或单个0x0A。(这可以通过过滤来完成
streambuf。)

在哪个编辑器中?一个好的编辑器应该自动检测行尾。可能不是直接的重复,但这里的答案适用:只需编写程序以允许任何一个行尾。在哪个编辑器中?一个好的编辑器应该自动检测行尾。可能不是直接重复,但这里的答案适用:只需对程序进行编码,以允许任何一行结束。您的答案引导我找到正确的解决方案。我已经编写了“ClearCR(stringstr)”函数,如果需要,它只需从字符串中删除“\r”。函数实际上只有一行:str.erase(std::remove(str.begin()、str.end()、'\r')、str.end()。也许这对某些人会有帮助。@Viper如果你在一个地方阅读所有的东西,这肯定是最简单的解决方案。我经常使用
类:一个非常简单的
std::string
包装器,带有一个调用
std::getline
操作符(
istream\u迭代器
)。在我的例子中,它提供了一个非常方便的地方来放置代码,以去除
'\r'
。您的回答引导我找到了正确的解决方案。我已经编写了“ClearCR(stringstr)”函数,如果需要,它只需从字符串中删除“\r”。函数实际上只有一行:str.erase(std::remove(str.begin()、str.end()、'\r')、str.end()。也许这对某些人会有帮助。@Viper如果你在一个地方阅读所有的东西,这肯定是最简单的解决方案。我经常使用
类:一个非常简单的
std::string
包装器,带有一个调用
std::getline
操作符(
istream\u迭代器
)。在我的例子中,它提供了一个非常方便的地方来放置代码,以去除
'\r'