Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> "перевод" консольного метода в Windows Forms 
:(
    Опции темы
nmc
Дата 31.1.2010, 20:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 124
Регистрация: 7.4.2009

Репутация: нет
Всего: -1



Доброго времени суток!

Как "перевести" данный код для отображения в  textbox ?
Код


       FileStream fs = null;

            try
            {

                fs = new FileStream(FileName, FileMode.Open, 
                                              FileAccess.Read);
            }
            catch(Exception exc)
            {
                    ...
            }

            byte [] arr = new byte[fs.Length];

            int N = fs.Read(arr, 0, (int)fs.Length);

            fs.Close();
            
            int i = 0, j = 0, k = 0;

            for(i = 0; i < N; i += 16)
            {
                Console.Write("{0:X8}", i);//???????
                for(j = 0; j < 16 && j + i < N; j++)
                {
                    Console.Write("{0,3:X2}", arr[j + i]);///?????????
                }
                
                for(k = 0; k < 17 - j; k++)
                    Console.Write("{0,3}", ' ');

                for(j = 0; j < 16 && j + i < N; j++)
                {
   
                    if(Char.IsControl((char)arr[j + i]))
                        Console.Write('.');
                    else
                        Console.Write((char)arr[j + i]);
                }
                Console.WriteLine();
            }
        }
    }
}



Это сообщение отредактировал(а) nmc - 31.1.2010, 20:33
PM   Вверх
gambit
Дата 31.1.2010, 23:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***
Награды: 1



Профиль
Группа: Комодератор
Сообщений: 1359
Регистрация: 25.6.2006
Где: я?

Репутация: 3
Всего: 40



меняй Console.Write на textBox1.Text +=

но это самый тупой и неэффективный способ, по нормальному я бы завел лист типа string, занес туда все значения, и потом уже отобразил бы его

Добавлено через 1 минуту и 16 секунд
и еще не понял, как у вас ошибка ловится, ошибка чтения, ловим ошибку, обрабатываем, а потом используем нерабочую переменную
PM MAIL ICQ Skype   Вверх
nmc
Дата 2.2.2010, 01:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 124
Регистрация: 7.4.2009

Репутация: нет
Всего: -1



Цитата

меняй Console.Write на textBox1.Text +=

Если так поменять то разница с консольным вариантом кода  большая (в консольном варианте это обычный 16-ричный просмотрщик файлов, как FARe) ,а так ерунда. например
Код

0 : 20724022422623223525223723824124225232240224225    Ïðàâèëüíîñòü ðàá
16 : 2382422193313108711111410732115105115116101    îòÛ!..Work siste
32 : 109331310131049505146131010010011597    m!....123...ddsa
48 : 10011597131010013109711510246102599839    dsa..d..asf.f;b'
64 : 10844102131098104131010210013109810313    l,f..bh..fd..bg.
80 : 10102100103131053525352511310102100103    .fdg..54543..fdg
96 : 102100103103103103103103103103103103103103103103    fdgggggggggggggg
112 : 103103103103102131010010313101021001310103    ggggf..dg..fd..g
128 : 2242262392252242262252391310239224226239228228    àâïáàâáï..ïàâïää
144 : 13105352535253333333                            ..54545!!!

команды вроде 
Console.Write("{0:X8}", i); Console.Write("{0,3:X2}", arr[j + i]);
форматируют текст (или может даже  переводят из системы счисления в другую)?!
Код

            FileStream fs = null;
            try
            {
                fs = new FileStream(FileName, FileMode.Open,
                                              FileAccess.Read);
            }
            catch (Exception exc){
                MessageBox.Show(exc.Message);
                return;
            }
            byte[] arr = new byte[fs.Length];
            int N = fs.Read(arr, 0, (int)fs.Length);
            fs.Close();
            int i = 0, j = 0, k = 0;
            // Отображаем информацию
            for (i = 0; i < N; i += 16)
            {              
                richTextBox1.Text+= i;
                richTextBox1.Text += " : ";
                for (j = 0; j < 16 && j + i < N; j++)
                {
                    richTextBox1.Text+= arr[j + i];                    
                }
                for (k = 0; k < 17 - j; k++)
                    richTextBox1.Text += ("    ");
                for (j = 0; j < 16 && j + i < N; j++)
                {
                    // Если управляющий символ
                    if (Char.IsControl((char)arr[j + i]))
                        richTextBox1.Text += '.';
                    else
                        richTextBox1.Text+=((char)arr[j + i]);
                }
                richTextBox1.Text += '\n';
            }
        }


Цитата


но это самый тупой и неэффективный способ, по нормальному я бы завел лист типа string, занес туда все значения, и потом уже отобразил бы его


Код


 public void readFile(string FileName)
        {
             List<string> list = new List<string>();
            FileStream fs = null;
            try
            {
                fs = new FileStream(FileName, FileMode.Open,
                                              FileAccess.Read);
            }
            catch (Exception exc)
            {
                 ...
             return;
            }

            byte[] arr = new byte[fs.Length];

            int N = fs.Read(arr, 0, (int)fs.Length);
            //ведь так не правильно 
           list.Add(fs.ToString());
           //как то через цикл нужно заполнить коллекцию
      
           
            // Закрываем поток
            fs.Close();

            int i = 0, j = 0, k = 0;

        }


PM   Вверх
mrbrooks
Дата 2.2.2010, 09:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 17
Всего: 306



nmc, вообще на будущее, что бы не ваять такие костыли отделяй интерфейс от реализации.
PM MAIL   Вверх
KelTron
Дата 2.2.2010, 18:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 745
Регистрация: 8.10.2006
Где: Красноярск

Репутация: 11
Всего: 38



nmc
Код

Console.Write("{0:X8}", i);
 заменяешь на 
Код

richTextBox1.Text += string.Format("{0:X8}", i);

И тд.


--------------------
Тысячами незримых нитей обвивает тебя Закон. Разрубишь одну - преступник. Десять - смертник. Все - Бог.
Эвенгар Салладорский, основатель Школы Тьмы.
PM MAIL   Вверх
nmc
Дата 2.2.2010, 20:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 124
Регистрация: 7.4.2009

Репутация: нет
Всего: -1



KelTron спасибо так работает.
Цитата

Console.Write("{0:X8}", i);
 //заменяешь на 
richTextBox1.Text += string.Format("{0:X8}", i);
//И тд.

Но если так открыть word-ский документ или графический файл (.jpg например)., то он открывается очень-очень долго (проект по сути  зависает,приходиться закрывать через диспетчер задач).

То есть нужно загнать FileStream в коллекцию и оттуда уже извлекать smile 

Код

public void readFile(string FileName)
        {
             List<string> list = new List<string>();
            FileStream fs = null;
            try
            {
                fs = new FileStream(FileName, FileMode.Open,
                                              FileAccess.Read);
            }
            catch (Exception exc)
            {
                 ...
             return;
            }
            byte[] arr = new byte[fs.Length];
            int N = fs.Read(arr, 0, (int)fs.Length);
            //ведь так не правильно 
           list.Add(fs.ToString());/////////////????????????
           //как то через цикл нужно заполнить коллекцию
      
            // Закрываем поток
            fs.Close();
            int i = 0, j = 0, k = 0;
//дальше как то извлекаем из lista
        }



Это сообщение отредактировал(а) nmc - 2.2.2010, 20:56
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0683 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.