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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Чтение из файла в ListBox 
V
    Опции темы
Incvizitor
Дата 11.3.2009, 23:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



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

Сижу весь вечер над ListBox-ом и пытаюсь правильно считать в него строки из файла file.txt вот что напечатал:

Код

        public void readFile()
        {
            file = new FileInfo("file.txt");
            fs = file.Open(FileMode.Open, FileAccess.Read, FileShare.Read);
            sr = new StreamReader(fs);

            string line = sr.ReadLine();

            listBox1.Items.Clear();

            while (line != null)
            {
                listBox1.Items.Add(line);
                line = sr.ReadLine();
            }
        }


Эта конструкция выводит все из файла, но readFile() дергаю FileSystemWatcher-ом, вот тут то и "косяк". file.txt время от времени пополняется новыми строчками, FileSystemWatcher срабатывает, дергает readFile() и при этом выводит опять все строчки, а нужно только то, что добавилось. Я не представляю как это делается, так что обращаюсь за помощью к специалистам. Я уже думал, что нужно как-то подсчитать количество строк в listBox1.Items, далее проверяем файл, изначально пропуская количество строк полученных в listBox1.Items и если там появилась строка или несколько, то добавить к тем что мы уже вывели. Но как это все реализовывается я не знаю :(

Буду очень рад за хороший примерчик. Спасибо!
PM MAIL   Вверх
lam0x7C4
Дата 12.3.2009, 00:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



хм... если добавлять только новые строки, то вот: 
      
Код

  public void readFile ( )
        {
            file = new FileInfo ( "file.txt" );
            using ( fs = file.Open ( FileMode.Open, FileAccess.Read, FileShare.Read ) )
            {
                using ( sr = new StreamReader ( fs ) )
                {
                    // можна так: добавление только новых строк
                    // пропускаем первые n строк.
                    int n = listBox1.Items.Count;

                    int i = 0;

                    string line;
                    while ( ( line = sr.ReadLine ( ) ) != null )
                    {
                        i++;
                        if ( i > n )
                            listBox1.Items.Add ( line );
                    }

                    // а можна и так:
                    // ведь строчки могут добавиться и в начало файла, и в середину:)
                    // так что, имхо, лучше перечитать заново
listBox1.Items.Clear();                   
string line;
                    while ( ( line = sr.ReadLine ( ) ) != null )
                    { 
                            listBox1.Items.Add ( line );
                    }
                }
            }
        }


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

PM MAIL ICQ   Вверх
Incvizitor
Дата 12.3.2009, 01:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо большое, все как нужно! Хотел вам плюс поставить, но форум говорит:

Цитата

Обнаружена ошибка:

У Вас недостаточно постов, чтобы изменять репутацию пользователей. Необходимо 100 постов.

Так что только спасибо.
PM MAIL   Вверх
Incvizitor
Дата 12.3.2009, 08:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



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

Простите за наглость, но не кинете в меня куском кода с реализацией автопрокрутки ListBox-а. Вопрос не очень важен, это так, может кто-то делал и знает smile Я уже не помню, но видел когда-то программу, там тоже выводились данные с обновлением строк (постоянно дописывались новые), так вот, если кликнуть на форму (в заголовок или любое пустое место), то запускалась автопрокрутка, то есть список автоматически прокручивался до последней строки, а если выделить сам список, то прокрутка останавливалась и можно было самому перемещаться по всему списку с помощью скрола. Не знаю, получилось ли объяснить, но я старался smile Спасибо!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

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


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

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


 




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


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

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