【问题标题】:Reverse text file writing in QT在 QT 中反转文本文件写入
【发布时间】:2012-02-28 17:46:42
【问题描述】:

如何更好地实现以相反的顺序逐个字符串写入 QFile。 使用 seek(0) 新字符串会覆盖旧字符串。

【问题讨论】:

  • 您是想从头到尾写入文件,还是只想反转文本文件?
  • 我需要从头到尾写入文件。我没有文件,我有数据要写。
  • 我认为这在 FS/OS 级别实际上是不可能的。您应该先恢复数据,然后按顺序写入。最接近向后写入的方法是将其填充到末尾,从头到尾查找每个字节,然后逐字节写入。这不是一个好策略,如果你有足够的内存,你应该把所有东西都堆叠起来,然后拆开并写下它们。

标签: qt reverse writing qfile


【解决方案1】:

您应该使用 QString 的QStack。由于它是一个 LIFO(后进先出)容器,我认为这就是您要搜索的内容。

在每个字符串到来时推送它们,然后弹出所有字符串:

QStack<QString> stack;
stack.push("first string");
stack.push("second string");
stack.push("third string");

while (!stack.isEmpty())
{
   QString string = stack.pop();
}

编辑:(cmets 中关于要写入的 2 个文件的新信息)

使用Qvector 存储所有QString。然后在for循环中访问第一个和最后一个元素,将它们写入每个文件中。可以这样做:

QVector<QString> vector;
vector.append("first string");
vector.append("second string");
vector.append("third string");

int size = vector.size();
for (int i=0; i<size; i++)
{
   QString string1 = vector[0]; // write it in one file
   Qstring string2 = vector[size-1-i]; // write it in another file
}

希望能回答你的问题。

【讨论】:

  • 谢谢。问题是我的 QList 很少。而且我需要将这些字符串保存两次,第一次是直接顺序,第二次是相反的。而且我想一次编写两个文件,并且不要以相反的顺序创建我的字符串的副本。但是似乎没有其他方法可以将所有字符串收集在一个列表或堆栈中,并以直接和反向顺序读取列表两次....
  • 因此您可以使用 QVector,因为您可以直接访问元素。查看我的编辑。
【解决方案2】:

阅读所有文件。将其保存到内存中的 QStrings 向量中。遍历所有字符串的向量并再次将此向量保存到文件中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-04
    • 1970-01-01
    • 2011-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    相关资源
    最近更新 更多