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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> периодически возникает 13 ошибка при открытии файл, fopen_s error 13 
:(
    Опции темы
Andrej78
Дата 9.4.2008, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



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

ошибка 13, насколько я понял - это Permission denied (Отказ в разрешении)

в чем может быть проблема?

заодно подскажите плз,  sprintf_s может добавлять данные в конец строки (чтобы не использовать SaveSmallString)?
как обычно это делается?
Код

int SaveHistory(CSecurity *Par,CSecurity *Par1,char *FileHist)
Параметры: Par-текущие значения, Par1 - предыдущие значения, файл для записи

для упрощения (пока делаю) иногда вместо Par и Par1 использую фиксированные z и z_prev

вывод в файл в формате: 
*/
{
    FILE *stream;
    errno_t err;                //переменая с результатом открытия файла
    char str_bid_ask[500],            //строка, формируемая для лога
         tmpstr[80];
    int jj=0;                //счетчики
    if ((z.dat[0].Secunde!=z_prev.dat[0].Secunde || z.dat[0].Minute!=z_prev.dat[0].Minute) && z.dat[0].BidF!=0 && z.dat[0].BidS!=0){
        //если время предыдущей записи не совпадает с текущей и текущая запись не пустая, то...
        z_prev=z;
        if( (err  = fopen_s( &stream, FileHist, "a+" )) !=0 )
        {
            printf("error at saving history %i\n", err);
            //exit(1); 
            return 2;
        }
        else {    //если нет ошибки при записи, то пишем
            //формирую строку записи для файла
            jj=0;str_bid_ask[jj]='\0';
            jj=SaveDigitToString(Par->dat[0].Month,str_bid_ask,jj,';');
            jj=SaveDigitToString(Par->dat[0].Day,str_bid_ask,jj,';');
            jj=SaveDigitToString(Par->dat[0].Year,str_bid_ask,jj,';');
            jj=SaveDigitToString(Par->dat[0].Hour,str_bid_ask,jj,';');
            jj=SaveDigitToString(Par->dat[0].Minute,str_bid_ask,jj,';');
            jj=SaveDigitToString(Par->dat[0].Secunde,str_bid_ask,jj,';');
            jj=SaveSmallString(Par ->TickerSpot,str_bid_ask,jj,';');
            sprintf_s(tmpstr,"%g",Par->dat[0].BidS); jj=SaveSmallString(tmpstr,str_bid_ask,jj,';');
            sprintf_s(tmpstr,"%g",Par->dat[0].OfferS); jj=SaveSmallString(tmpstr,str_bid_ask,jj,';');
            jj=SaveSmallString(Par->TickerFut,str_bid_ask,jj,';');
            sprintf_s(tmpstr,"%g",Par->dat[0].BidF); jj=SaveSmallString(tmpstr,str_bid_ask,jj,';');
            sprintf_s(tmpstr,"%g",Par->dat[0].OfferF); jj=SaveSmallString(tmpstr,str_bid_ask,jj,';');
            sprintf_s(tmpstr,"%g",Par->dat[0].SpreadFaSb); jj=SaveSmallString(tmpstr,str_bid_ask,jj,';');
            sprintf_s(tmpstr,"%g",Par->dat[0].SpreadFbSa); jj=SaveSmallString(tmpstr,str_bid_ask,jj,';');
            sprintf_s(tmpstr,"%g",Par->dat[0].SpreadSaFb); jj=SaveSmallString(tmpstr,str_bid_ask,jj,';');
            sprintf_s(tmpstr,"%g",Par->dat[0].SpreadSbFa); jj=SaveSmallString(tmpstr,str_bid_ask,jj,';');
            sprintf_s(tmpstr,"%g",Par->dat[0].SKO); jj=SaveSmallString(tmpstr,str_bid_ask,jj,';');
            sprintf_s(tmpstr,"%g",(Par->dat[0].AvgSpreadFaSb+Par->dat[0].AvgSpreadFbSa)*0.5); jj=SaveSmallString(tmpstr,str_bid_ask,jj,';');
            str_bid_ask[jj++]='\n';str_bid_ask[jj++]='\0';

            fputs(str_bid_ask,stream);
            fclose(stream);
            printf("%s %i:%i \n","Saving history... ",z.dat[0].Minute,z.dat[0].Secunde);
            return 0;
        }//если нет ошибки при записи, то пишем
    }//if ((Par->dat[0].Secunde!=Par1->dat[0].Secunde || Par->dat[0].Minute!=Par1->dat[0].Minute) && Par->da......
    else {
        z_prev=z;
        return 1; //если записывать не нужно, то выход такой
    }
}

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

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

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

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

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


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

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


 




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


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

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