Новичок
Профиль
Группа: Участник
Сообщений: 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; //если записывать не нужно, то выход такой } }
|
|