Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.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
QTextStream readAll()删除换行符_Qt_Qt5_Qtcore - Fatal编程技术网

QTextStream readAll()删除换行符

QTextStream readAll()删除换行符,qt,qt5,qtcore,Qt,Qt5,Qtcore,我使用QFile和QTextStream首先读取一个文件,然后将未修改的读取内容写回同一个文件。代码如下: QFile inFile("file.txt"); if(!inFile.open(QFile::ReadOnly | QFile::Text)) { qCritical() << "ERROR: Unable to open input file: " << "file.txt"; exit(1); } QTextStream inStream(&

我使用QFile和QTextStream首先读取一个文件,然后将未修改的读取内容写回同一个文件。代码如下:

QFile inFile("file.txt");
if(!inFile.open(QFile::ReadOnly | QFile::Text))
{
    qCritical() << "ERROR: Unable to open input file: " << "file.txt";
    exit(1);
}
QTextStream inStream(&inFile);
QString fileContents = inStream.readAll();
inFile.close();

QFile outFile("file.txt");
if(!outFile.open(QFile::WriteOnly | QFile::Text))
{
    qCritical() << "ERROR: Unable to open output file: " << "file.txt";
    exit(1);
}

QTextStream outSream(&outFile);
outSream << fileContents;
outFile.close();
进入

i、 e.在此过程中,新行将被删除。为什么会这样?如何防止它?

传递给open的QIODevice::Text标志告诉Qt将Windows样式的行终止符\r\n转换为C++样式的行终止符\r\n。 你是在Windows下操作的吗?您应该能够在二进制编辑器中的输入和输出文件上看到\r\n。传递给open的QIODevice::Text标志告诉Qt将Windows样式的行终止符\r\n转换为C++样式的终止符\r\n。 你是在Windows下操作的吗?您应该能够在二进制编辑器中的输入和输出文件上看到\r\n。

关于QIODevice::openMode中的文本官方文档中说

读取时,行尾终止符转换为“\n”。写入时,行尾终止符被转换为本地编码,例如Win32的“\r\n”

上面说的是Win32,在使用Win64时,我发现Qt5.8的工作方式不同。 使用openMode中的QIODevice::Text,QIODevice::readAll将删除所有'\r','\t'

并且谈论\n,它们被\r openMode正在使用的任何openMode所取代。 如果使用QIODevice::Text模式,可能会被删除。

关于openMode中的QIODevice::Text,官方文件称

读取时,行尾终止符转换为“\n”。写入时,行尾终止符被转换为本地编码,例如Win32的“\r\n”

上面说的是Win32,在使用Win64时,我发现Qt5.8的工作方式不同。 使用openMode中的QIODevice::Text,QIODevice::readAll将删除所有'\r','\t'

并且谈论\n,它们被\r openMode正在使用的任何openMode所取代。
如果使用QIODevice::Text模式,可能会被删除。

解决方案是不要使用QFile::Text或QIODevice::Text,如果您正在阅读,只需使用QIODevice::ReadOnly,这样您还可以计算出所使用的确切行尾并适当地处理它们。我在使用QIODevice::Text打开时遇到了MacCR或“\r”行结尾的问题。

解决方法是不要使用QFile::Text或QIODevice::Text,如果您正在阅读,只需使用QIODevice::ReadOnly,这样您还可以计算出所使用的确切行结尾并进行适当处理。我在使用QIODevice::Text打开MacCR或“\r”行结尾时遇到了这个问题。

它在Debian 8上按预期工作没有发生转换,输出看起来与输入完全一样。你用窗户吗?可能不同的编解码器用于读写!?在不使用QFile::Text标志的情况下尝试相同的操作,以避免解释任何控制字符\n等。如果可能,对两个文件进行十六进制转储。我们需要好好看看线路终结者到底是什么,假设它们不会完全消失,它们会变成什么样子。对我来说很有用。有两件事需要尝试:首先,qDebug在Debian 8上按预期工作,没有转换发生,输出看起来和输入完全一样。你用窗户吗?可能不同的编解码器用于读写!?在不使用QFile::Text标志的情况下尝试相同的操作,以避免解释任何控制字符\n等。如果可能,对两个文件进行十六进制转储。我们需要好好看看线路终结者到底是什么,假设它们不会完全消失,它们会变成什么样子。对我来说很有用。有两件事需要尝试:首先,qDebug,但由于inFile和outFile都是以相同的模式打开的,因此生成的文件应该有CRLF行终止符。除非它们在原始文件中不是真正的CRLF行终止符。Sergey,你是对的,应该这样做。我没有看到输出文件上的QIODevice::文本。事实上,对于我来说,使用Windows 64位Qt5.5.1时,它确实可以正常工作。需要对输入进行二进制转储,输入上可能只有一个\n,而不是一个\r\n。我不认为在输入中只有\n会将其完全删除。但可能是一些奇怪的文件,带有旧式的仅限Mac CR的换行符,我不确定这些换行符是否会损坏,或者在程序完成后,他打印文件的方式可能有问题。输入中只有“\n”确实会在Windows上完全删除它!有趣的我记得当QTextStream与QIODevice::Text结合使用时,它的工作方式很奇怪,也许这是这种奇怪的另一面。猜测QTextStream是用来自己处理换行符的。但是由于infle和outFile都是以相同的模式打开的,所以生成的文件应该有CRLF行终止符。除非它们在原始文件中不是真正的CRLF行终止符。Sergey,你是对的,应该这样做。我没有看到输出文件上的QIODevice::文本。事实上,对于我来说,使用Windows 64位Qt5.5.1时,它确实可以正常工作。需要对输入进行二进制转储,输入上可能只有一个\n,而不是一个\r\n。我不认为在输入中只有\n会将其完全删除。但可能是一些老式的奇怪文件
Mac CR仅显示换行符,我不确定这些换行符是否会中断,或者在程序完成后,他打印文件的方式可能有问题。输入中只有“\n”确实会在Windows上完全删除它!有趣的我记得当QTextStream与QIODevice::Text结合使用时,它的工作方式很奇怪,也许这是这种奇怪的另一面。猜测QTextStream是用来自行处理换行符的。
1
2
3
4
5
12345