Выделение памяти для расширенного текстового поля в C #

Мне нужно загрузить текстовый файл в RichTextBox в C #. Загрузка текстового файла в поле расширенного текста должна выполняться способом C ++.

Есть ли способ загрузки файла в поле расширенного текста, как в приведенном ниже коде C ++?

Объяснение для приведенного ниже кода C ++:

Здесь дескриптор — это дескриптор текстового поля VC ++, выделяющий память для дескриптора текстового поля. На основе выделенной памяти содержимое из буфера загружается в текстовое поле в C ++.
Как реализовать это поведение в C #?

Код C ++:

length = (UINT) file.GetLength();
editHandle = pCEdit->GetHandle();
if (LocalReAlloc(editHandle, length + 1, LHND) == NULL )
{
file.Close();
return SF_MEM_ALLOC_ERROR;
}

// read file into the editBuffer
file.Read( (editBuffer =
(LPSTR) LocalLock(editHandle)), length );
editBuffer[length] = 0;
LocalUnlock( editHandle );
// Write it to the Text box, from the buffer
pCEdit->SetWindowText(A2T(editBuffer));

Приведенный выше код не имеет проблем с выравниванием.

Для приведенного выше кода C ++ я просто использовал следующие строки кода C #

Код C #:

    private void button1_Click(object sender, EventArgs e)
{
string fullPath = "C:\\report.txt";
richTextBox1.LoadFile(fullPath, RichTextBoxStreamType.PlainText);
}

Но этот способ загрузки в поле Rich Text приводит к проблема выравнивания.

Текстовый файл, который я загружаю, содержит много пробелов и вкладок.
Как выделить память для расширенного текстового поля в C # в зависимости от размера загружаемого файла?
для проверки вопроса выравнивания. пожалуйста, найдите скриншот в ссылке ниже

Выход для кода C #:
http://e.pictureupload.us/114559970552285a9a71816.png

0

Решение

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

0

Другие решения

Вы должны правильно отформатировать вашу строку в файле при сохранении данных. Проблема в размерах вкладок. Как вы уже упоминали, ваш файл содержит пробелы в сочетании с вкладками. Так что разные размеры вкладок (например, для блокнота и визуальных студийных строк) являются главной проблемой.

Одним из возможных решений может быть сохранение файла в полностью отформатированном виде (без использования пробелов) только с использованием вкладок.

Если вы пишете файл в .NET см. эту ссылку, чтобы сохранить файл.

0

Спасибо всем за ваш вклад ..

Выше C ++ код использует 8-битный LPSTR в качестве буфера.
Проблема с форматированным текстовым полем в том, что он не поддерживает Unicode — 8-битные символы … Он поддерживает только — 16-битные символы

Вместо расширенного текстового поля мы можем использовать текстовое поле в режиме только для чтения с Юникод — 8 бит..

    private void button1_Click(object sender, EventArgs e)
{
string fullPath = "C:\\report.txt";
byte[] byteArra = System.IO.File.ReadAllBytes(fullPath);
textBox1.Text = Encoding.UTF8.GetString(byteArra);
}
0

Используйте следующий простой код — в Visual C ++ для достижения вашего результата. Он просто переносит файл в текст RTB. Я боролся за это два дня. Я достиг этого, просто покрыв свой код C # для C ++ / CLR

String^ fullPath = "C:\\report.txt";
richTBox1->LoadFile(fullPath, RichTextBoxStreamType::PlainText);
0
По вопросам рекламы [email protected]