Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Чтени и запись в файл, Выводить что добавили в фай, Одновременный ввод и вывод из файла 
:(
    Опции темы
iSherhan
Дата 19.3.2012, 16:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Здравствуйте. Подскажите пожалуйста как сделать?

например пишу в файл (текстовый)

Код
ofstream os("c:/text.txt");
ifstream is("c:/text.txt");

while (true)
{

os<<"bla-bla";
sleep(300)
}


/*где то в другом месте программы из другого потока

вот надо построчно считывать вводимый файл
если достигнут конец файла поспать 1 секунду
затем проверить нет ли новых строк. если есть считать их опять
до конца файла и снова уснуть
и т.д
желательно используя ifstream

организовать своего- рода мониторинг добавления строк в файл.


делаю вот так цикле

Код
while (true)
{
std::string s;
is>>s;
std::cout<<s;
sleep(1000);
}


- не работает 

Модератор: Не забываем пользоваться кнопочкой "Код"

Это сообщение отредактировал(а) bsa - 20.3.2012, 14:16
PM MAIL   Вверх
JackYF
Дата 19.3.2012, 22:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

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



Цитата(iSherhan @  19.3.2012,  15:59 Найти цитируемый пост)
- не работает */  

А точнее?

И лучше приведи весь код. Много зависит от того, как организованы потоки и как открывались файлы.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
IBS
Дата 19.3.2012, 22:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(iSherhan @  19.3.2012,  16:59 Найти цитируемый пост)
если достигнут конец файла поспать 1 секунду

Можно попробовать заключить это дело в еще один while который останавливается также по концу файла, а после внутреннего цикла(со считыванием из файла) сделать sleep

Это сообщение отредактировал(а) IBS - 19.3.2012, 22:18
PM MAIL   Вверх
iSherhan
Дата 20.3.2012, 05:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



А можно код
а то делаю вот так 

Код

    std::ifstream is;
    is.open("e:/temp/rw.txt");


    while (true)
    {
       string s;
       is>>s;
       if (s.size()==0) break;
       std::cout<<s;
       sleep(1000);
    }


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

добавляю так
Код

  ofstream os;

  //...........

   os<<"bla-bla 1"<std::endl;
  

  //............

  os<<"bla-bla 21"<std::endl;
  os.flush();
  //и тд




вообще такое возможно с помощью ostream ifstream  ????




PM MAIL   Вверх
xvr
Дата 20.3.2012, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Цитата(iSherhan @  19.3.2012,  16:59 Найти цитируемый пост)
ofstream os("c:/text.txt");
ifstream is("c:/text.txt");

Работать не будет - вы 2 раза открыли один и тот же файл на чтение и на запись. Последствия непредсказуемые, т.к. у ?stream есть внутренние буфера, которые в данном случае надо явно сбрасывать после каждой записи (и перед каждым чтением). Или отключать буферизацию вообще


Это сообщение отредактировал(а) xvr - 20.3.2012, 13:41
PM MAIL   Вверх
ambler
Дата 20.3.2012, 14:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Код

    while (true)
    {
       string s;
       is>>s;
       if (s.size()==0) break;
       std::cout<<s;
       sleep(1000);
    }

Этот код когда, прочитает все строки выходит из цикла.

Можно сделать так:
отслеживать изменение файла по его атрибутам, считывать из него всю информацию, запоминая кол-во прочитанных байтов, в случае изменения даты модификации, открывать файл, сдвигая позицию чтения, на кол-во прочитанных байт до этого.
Для меж потокового взаимодействия лучше использовать критические секции,  мьютексы.
PM MAIL   Вверх
ambler
Дата 20.3.2012, 15:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Код

   std::ifstream is;
    is.open("e:/temp/rw.txt");
    while (true)
    {
       string s;
       is>>s;
       if (s.size()==0) break;
       std::cout<<s;
       sleep(1000);
    }


Немного переписал код, с мониторингом добавления строк в файл справляется)
Код

#include <iostream>
#include <fstream>
#include <Windows.h>

using namespace std;

void readFile()
{
    ifstream file;
    file.open("D:\\11.txt");

    if (!file.is_open()) return;

    while(true)
    {
        string tmp;
        file >> tmp;
        if (file.fail())
        {
            Sleep(1000);
            file.clear();
            continue;
        }
        cout << tmp << endl;
    }

    file.close();
}

int main()
{
    readFile();
    return 0;
}


Это сообщение отредактировал(а) ambler - 20.3.2012, 15:31
PM MAIL   Вверх
iSherhan
Дата 21.3.2012, 03:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Cпасибо всем ответившим. Проблема решена. оказалось, что
класс чтения из файла ifstream не хотел дальше читать из файла при достижении конца файла в данный
момент. Но ofstream ведь продолжал добавлять данные.
Вот если ifstream  не доходил до конца а останавливал чтение допустим за одну строку до конца файла,
то далее он читал и добавленные другим файловым потоком строки.
Дело я думаю в установке при достижении конца файла флага ios::eof.
После вызова ifstream::clear()  поток далее читал из файла
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


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

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


 




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


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

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