当我使用覆盆子pi 3上的Qt将文本文件复制到USB闪存时,当我在Windows上打开这些文本文件时,文本文件'\n'
字符在Windows上似乎不起作用。
我搜索了这个主题,我看到Linux和Windows上的文本文件格式不同。所以我必须将基于Linux的文本文件复制到带有Qt的Flash Memory并在Windows上打开这些文件。
答案 0 :(得分:1)
有几个字符可以表示新行。通常的是这两个:
'\n' or '0x0A' (10 in decimal) -> This character is called "Line Feed" (LF).
'\r' or '0x0D' (13 in decimal) -> This one is called "Carriage return" (CR).
不同的操作系统以不同的方式处理换行符。以下是最常见的简短列表:
DOS和Windows:
他们希望换行符是两个字符的组合,即'\r\n'
(或13后跟10)。
Unix(以及Linux也是如此):
Unix使用单个'\n'
来表示新行。
Mac:
Mac使用单个'\r'
。
编辑:正如MSalters所说,Mac OSX是Unix并使用\n
。单\r
是古老的Mac OS9
答案 1 :(得分:0)
我猜你只是在传输文件,而不是用它做任何事情,但是我不能想到另一个选择,而不是打开它并重写行结尾。
如果在Windows上打开.txt文件并从中读取(使用c ++或c ++ / Qt),然后在将这些行写入新文件时写入行,那么行结尾应适合Windows sepcifics。
您可以像这样阅读文件:
std::ifstream file;
file.open(filePath);
std::ofstream file2;
file2.open(filePath2);
while(std::getline(file, line))
{
file2<<line;
}
至少文档说明getline搜索&#39; \ n&#39;它应该适用于Windows和Unix。如果没有,您仍然可以将分隔符设置为&#39; \ n&#39;。
如果你想写文件&#39; Windowslike&#39;在您的树莓上,您可以尝试更换&#39; \ n&#39;带有&#39; \ r \ n&#39;
的字符看起来应该是这样的:
std::string myFileAsString;
std::string toReplace = "\n";
std::string replaceWith = "\r\n";
myFileAsString.replace(myFileAsString.find(toReplace), toReplace.length(), replaceWith);
在哪里搜索&#39; \ n&#39;然后将其替换为&#39; \ r \ n&#39;