Особенности языка mql5, тонкости и приёмы работы - страница 65

 

подскажите как уменьшить размер файла с бинарными данными до нового размера данных, без удаления самого файла или только через вызов внешних dll можно реализовать?

 
Konstantin:

подскажите как уменьшить размер файла с бинарными данными до нового размера данных, без удаления самого файла или только через вызов внешних dll можно реализовать?

Надо аналог функции SetEndOfFile.

Об этом просили еще лет этак 6 назад

 
Комбинатор:

Надо аналог функции SetEndOfFile.

Об этом просили еще лет этак 6 назад

я об этом и пишу )) а то не кашерно делать через внешние dll или удаление файла

 
Комбинатор:

Надо аналог функции SetEndOfFile.

Об этом просили еще лет этак 6 назад

bool SetEndOfFile( const string FileName, const uint Size, const int Commong_Flag = 0 )
{
  uchar Buffer[];
  
  return((FileLoad(FileName, Buffer, Commong_Flag) > Size) && ArrayResize(Buffer, Size) && FileSave(FileName, Buffer, Commong_Flag)));
}
 
fxsaber:

файл свой размер изменит лишь в сторону увеличения, если массив данных уменьшится, то файл останется с прежним размером

 
Konstantin:

файл свой размер изменит лишь в сторону увеличения, если массив данных уменьшится, то файл останется с прежним размером

Уменьшения.

 
fxsaber:
Не ну это же аццкий оверхед
 
Комбинатор:
Не ну это же аццкий оверхед

Безусловно!

 
Еще раз на тему double

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Ошибки, баги, вопросы

fxsaber, 2018.01.15 11:53

Потому что входные fmod - double. double не может хранить огромное количество целых чисел. Например, Ваш случай:

Print(DoubleToString((double)131472503841474907, 0)); // 131472503841474912

Делайте так

long fmod( const long Value, const long Value2 )
{
  return(Value % Value2);
}


На примере float можно быстро понять особенность double

#define PRINT(A) Print(#A + " = " + (string)(A))

void OnStart()
{
  for (int i = 0; i < INT_MAX; i++)
    if ((int)(float)i != i)
    {
      PRINT(i);
      PRINT((float)i);
      PRINT((double)i);
      
      break;
    }
}


Результат

i = 16777217
(float)i = 16777216.0
(double)i = 16777217.0


ЗЫ double не теряет инфу всего int-диапазона, с long уже не так.

 
Konstantin:

я об этом и пишу )) а то не кашерно делать через внешние dll или удаление файла

видели, хотели но забыли

Ошибки, баги, вопросы
Ошибки, баги, вопросы
  • 2011.08.01
  • www.mql5.com
Общее обсуждение: Ошибки, баги, вопросы
Причина обращения: