• 7740阅读
  • 9回复

【提问】关于大文件的显示问题 [复制链接]

上一主题 下一主题
离线叹叹想
 
只看楼主 倒序阅读 楼主  发表于: 2005-11-01
我用的是linux的操作系统,自己写了一个显示文件的对话框,显示文本用的是qtextedit类。小文件的显示都比较快。但是要显示大一些的文件就会很慢(读过最大的文件是300M的,当文件大到30多兆的时候读的就很慢了)

后来加了在程序中加了一条Qt::LogText,读大文件的,速度是快了一些,但是比较大的还是很慢。可是这种模式下的textedit有一些符号不能按照文件的原样读出来。像<>中括号还有一些其他的符号等等,我看qt文档上还写到cursor movement will not work,指针不能用。我还想实现查找功能,所以需要用到这些。

开始以为是缓存读大数据太慢,但是同样的文件用vi编辑打开就要快很多。

大家有什么好的方法请告诉我,谢谢!
离线forgotten
只看该作者 1楼 发表于: 2005-11-01
vi不会一次全部读入文件的全部内容。你一次只读可供显示的1屏或几屏数据就会快些
Life is forgotten
离线叹叹想
只看该作者 2楼 发表于: 2005-11-01
可是我应该怎么把文件分才合适呢。我也想过分成一块一块的读,用fread读,可是不能像vi一样控制到一行读完了分页,分开的地方肯定是不定的,有时候最后还有乱码。不知道应该怎么办。谢谢大家。
离线zaurus
只看该作者 3楼 发表于: 2005-11-01
或许这样能解决乱码问题
  QTextCodec *codec = QTextCodec::codecForName("GB18030-0");
  QTextStream t;
  t.setCodec(codec)l
离线叹叹想
只看该作者 4楼 发表于: 2005-11-02
我先看看,不知道qt中有没有分块读的,比如说一次读10M,用QTextStream好像只能是读全部或是一行什么的。
离线wuxian610
只看该作者 5楼 发表于: 2005-11-02
同志们, 参看该帖子:
   
    http://www.qtcn.org/bbs/read.php?tid=2005&page=1&toread=1
   
    没解决再支一声.
离线叹叹想
只看该作者 6楼 发表于: 2005-11-04
楼上的,我用你说的方法试了一下,但是有断错。以下是我要调用的程序

void DisplayDl::readFile()
{
  uint BLOCKSIZE=1024;
  uint filesize;
  filename=qApp->argv()[1]   //这里得到文件名称
  QFile file(filename);
  if (!file.open(IO_ReadOnly)
  {
      cout <<" The file can't open !" << endl;
  }
  QTextStream fromstream(&file);
  QTextStream tostream;
  filesize=(fromstream.read()).length();
  char *p=new char[BOLCKSIZE];
  while (filesize >0)
  {
      if (filesize >=BOLCKSIZe)
      {
          fromstream.readRawBytes(p,BLOCKSIZE);
          tostream.writeRawBytes(p,BOLCISIZE); //执行这条语句的时候断错。程序跳出
          textEdit->append(tostream.read());
          filesize-=BLOCKSIZE;
      }
      else
      {
          fromstream.readRawBytes(p,filesize);
          tostream.writeRawBytes(p,filesize);
          textEdit->append(tostream.read());
          filesize-=filesize;
      }
    }
}

可以帮我看看有什么问题吗
离线wuxian610
只看该作者 7楼 发表于: 2005-11-04
晕,
你的toStream没有初始化设备.
QTextStream fromstream(&file);//file即是fromstream的设备.
QTextStream tostream;
离线叹叹想
只看该作者 8楼 发表于: 2005-11-04
那我应该在建一个文件,然后向这里面写是吗?

开始的时候我不想用tostream.writeRawBytes(p,BOLCISIZE);
我想直接
QString part_text;
part_text.setLatin1(p);
textEdit->append(part_text);
可是显示出来的是乱码。
离线wuxian610
只看该作者 9楼 发表于: 2005-11-07
快速回复
限100 字节
 
上一个 下一个