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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> быстрая работа с файлами 
:(
    Опции темы
Andrej78
Дата 9.3.2011, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



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

Возник такой вопрос:

В файл попадают новые строки со сокростью примерно 10  строк в секунду.
Если просто загрузить в программу историю процесса за сутки, то всё нормально.

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

Как с этим бороться (нужны все данные)?

пока что программка консольная в vs2005, но если придется, переделаю под winapi.


да, источник выдает текстовый файл с новыми строками, программа этот файл читает.

Это сообщение отредактировал(а) Andrej78 - 9.3.2011, 15:07
PM MAIL   Вверх
boostcoder
Дата 9.3.2011, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

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



т.е. у вас есть файл, в который, некоторый процесс с определенной периодичностью дописывает данные?
и вы хотите, что некоторый другой процесс, мог обрабатывать добавленные данные в реальном времени?
PM WWW   Вверх
VictorTsaregorodtsev
Дата 9.3.2011, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Прога-источник - Ваша? В смысле - её исходники можете изменить?
Если да - то при создании (или открытии на запись) там файла поставьте атрибуты, допускающие расшаривание доступа к нему. В ВинАПИ это делается с использованием функции CreateFile, может, и в MFCшных классах для доступа к файлам можно будет нужный атрибут задать.

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

Если же прогу-источник изменить нельзя - то всё сложнее (не могу сказать, реализуемо ли - не такой уж спец в ВинАПИ, чтобы ответить сразу, а не после раскопок в МСДН).

Поскольку проблема одновременного доступа к файлам и частая, и учебная - то народ, думаю, может помочь с указанием литературы (особенно если в ВинАПИшных разделах программистских форумов поспрашивать). Если не ошибаюсь, то в первых изданиях талмуда Дж.Рихтера (середина-конец 90х) совместный доступ к файлам разбирался (сейчас открыл четвертое издание 2001г - там только про совместный доступ к проецируемым в память файлам, т.е. активно изменяемая книга может полезные Вам вещи содержать только во вполне определенных своих версиях).

PM MAIL WWW   Вверх
Andrej78
Дата 9.3.2011, 16:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



угу.

сейчас файл открываю вот так:
Код

int LoadDataFile(char *cFile, char delim)    /* возвращает 0 если всё в порядке, 1 если не загрузился файл */
{
    long NumTestStr=0;
    errno_t err;                    //переменая с результатом открытия файла
    bool flag=0;
    if( (err  = fopen_s( &stream_tt, cFile, "r+" )) !=0 ) 
    {
        //printf("Error at opening file N %i\n",err); 
        return 1;}
    else if (feof(stream_tt))  {printf("FEOF !!!\n"); fclose(stream_tt);} 
    else {
        char spread_str[500];            //рабочая строка
        while (Instr.index < NumQuotes && !feof(stream_tt))
        {
                spread_str[0]='\0';
                fgets(spread_str,499,stream_tt);
                LastQuote = ReadAllTradeStr(spread_str, delim);
                if (LastQuote.Close>0 ) {    // нужен для отсева неправильных даных
                        //создание экземпляра и указание на него в массиве Instr
                        Instr.z[Instr.index]= new Tick2;    //выделяю память и указываю на область памяти типа Tick
                        Instr.i[Instr.index]= new Indicators;
                        *Instr.z[Instr.index++] = LastQuote;     //присваиваю значение элементу массива
                        printf("%i:%i   Instr = %i\n",Instr.z[Instr.index-1]->Minute,Instr.z[Instr.index-1]->Secunde,Instr.index-1);
                        flag=true;
                    }//if (LastQuote.Close>0 && LastQuote.Bid>0 && LastQuote.Ask>0) {
        }//while
        fclose(stream_tt);
        if (flag) remove(cFile);
    }//else
    return 0;
}

PM MAIL   Вверх
Andrej78
Дата 9.3.2011, 16:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



нет, программа-источник не моя, читалку запускаю строго после открытия первой, но первая скорее всего открывает и закрывает выходной файл по своему желанию. 

параметр в fopen_s( &stream_tt, cFile, "r+" )) !=0 ) с "r" поменял на "r+".

вроде стало читать все строки.

Спасибо.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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