2009-07-16 4 views
0

У меня возникла проблема с хранением огромного количества текста в богатом текстовом поле.richTextBox лимит символов?

Я пытаюсь прочитать текстовый файл довольно большой (от 90mb до 450mb) и разместить то, что я прочитал в богатом текстовом поле. Он работает в простой программе, но когда я выполняю сложную программу, я получаю исключение OutOfMemory.

Одна вещи, чтобы отметить, что, когда я выхожу мою простую программу, я получаю OutOfMemory исключения перед программой возвращает 0.

Вот код моих простых программ:

array<String^>^ strArray; 
    StreamReader^ sr; 
    String^ dummyStr; 
    int dummyInt; 

     sr = gcnew StreamReader("C:\\testsize.txt"); 

     while((dummyStr = sr->ReadLine())!= nullptr) 
     { 
      dummyInt++; 
     } 
     sr->Close(); 

     sr = gcnew StreamReader("C:\\testsize.txt"); 
     strArray = gcnew array<String^>(dummyInt); 
     for(int i=0; i < strArray->Length; i++) 
     { 
      strArray[i] = sr->ReadLine(); 
     } 
     richTextBox1->Lines = strArray; 

У меня есть аналогичный фрагмент кода в моем проекте, и исключение появляется, когда я делаю строку richTextBox1-> Lines = strArray.

Я прочитал документацию богатого текстового поля, и он говорит, что максимальный предел составляет 64 Кбайт символов, но это имеет смысл на полпути, поскольку я могу загрузить текст, но, я думаю, у программы есть проблема с ее сбросом после этого.

Любые идеи? Я пытаюсь найти некоторые пользовательские элементы управления без ограничения, но пока ничего не добился.

+0

Можете быть в состоянии помочь мне с пользовательским контролем, если вы сообщите нам, что это за платформа/API. Я не знаком с QT, так может быть? – DeusAduro

+0

Это под Windows Vista, VS2008, C++ – Dinoo

ответ

1

Что касается демпинга огромного количества текста в богатое редактирование, это, как правило, будет мучительно медленным, возьмите блокнот, например, попробуйте открыть с ним файл размером 2 МБ. Я думаю, что более продвинутые текстовые редакторы справляются с этим - это «виртуальный контроль», который, как я знаю, часто используется с элементами управления списками, и я бы тоже подумал с текстовыми полями. Они в основном действуют/функционируют так же, как ваш обычный повседневный контроль, но не пытаясь отображать кучу текста за раз, у них виртуальное пространство «с экрана».

Что касается проблемы с вашей памятью ... Я смущен, что вы говорите, что ошибка происходит в последней строке вашего образца кода, когда вы пытаетесь сбрасывать текст на него. Вы также отмечаете, что предел составляет 64 КБ, поэтому теперь, если ваш файл будет огромным, как вы говорите ... имеет смысл, что вы получаете ошибку там, где вы пытались сбрасывать более 64 КБ текста в ограниченную ячейку размером 64 КБ. Я что-то упускаю?

Редактировать Я перечитал часть вопроса, я вижу, что вы просите сейчас, поэтому в простой программе вы получите сообщение об ошибке после того, как все будет загружено, когда программа выйдет. Выбросьте точку отладки в свои деструкторы и посмотрите, где именно происходит эта ошибка.

Редактировать 2 Теперь, когда я знаю, в какой системе вы находитесь, я пошел и посмотрел, документация немного сложнее, чем предел 64K. Что в первую очередь относится не к 64 КБ, а к 64000 символов. Также обратите внимание, что вы можете изменить этот предел, как вам будет угодно. Во-вторых, если вы транслируете с помощью SF_TEXT, а не SF_RTF, этот предел не имеет никакого эффекта, что я бы себе представил, что происходит за увиденным интерфейсом .NET.

+0

О проблеме с памятью, Я упомянул об этом, потому что в простой программе я могу загружать код (даже если он медленный), а затем прокручивать его и все такое. Я получаю исключение, когда пытаюсь закрыть программу (прямо перед оператором «return 0;»). В более сложном проекте я получаю исключение, когда пытаюсь загрузить код. Я пытался указать на то, что в текстовом поле размером 64 КБ можно загрузить код 90 МБ, вот почему я был ошеломлен ха-ха. – Dinoo

+0

Я сожалею, что поймал, что на втором прочитал. И это кажется довольно странным ...какую платформу/api вы используете? – DeusAduro

+0

Нет проблем. Его под Vista, VS 2008, C++. Итак, я думаю, что .NET? – Dinoo

Смежные вопросы