Мастера DELPHI, Delphi programming community Рейтинг@Mail.ru Титульная страница Поиск, карта сайта Написать письмо 
| Новости |
Новости сайта
Поиск |
Поиск по лучшим сайтам о Delphi
FAQ |
Огромная база часто задаваемых вопросов и, конечно же, ответы к ним ;)
Статьи |
Подборка статей на самые разные темы. Все о DELPHI
Книги |
Новинки книжного рынка
Новости VCL
Обзор свежих компонент со всего мира, по-русски!
|
| Форумы
Здесь вы можете задать свой вопрос и наверняка получите ответ
| ЧАТ |
Место для общения :)
Орешник
Коллекция курьезных вопросов из форумов
Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / rsdn.org

 
Чтобы не потерять эту дискуссию, сделайте закладку « предыдущая ветвь | форум | следующая ветвь »

Тупая ошибка не могу разобраться почему


superb0t ©   (31.10.18 19:01

Предыстория: при потоковом копировании с диска на диск решил добавить функцию проверки свободного пространства на диске, но вот тут как стало глючить, вроде все правильно в коде, но вылетает ошибка постоянно.  
 

// Global Varible
var
 GByteAmount: int64;
 GSourceSize: int64;
 GStartTime: Cardinal;
//...........
function TFrmProgressBarMoveFile.CheckFreeSpace(RequestSpace: int64; Drive: String): Boolean;
var
 FreeByte, DriveTotalSpace, DriveFreeSpace, DFreeSpace: Int64;
 CountReadSecond: Int64;
 LastBuffer: Boolean;
 TimeStep  : Cardinal;
begin
 Result     := false;
 LastBuffer := false;
 if Not GetDiskFreeSpaceEx(PChar(Drive), FreeByte, DriveFreeSpace, @DriveFreeSpace) then Exit;
 DFreeSpace := DriveFreeSpace;

 // check the last buffer
 if (GByteAmount <> 0) and ((MOVE_BUFFER_SIZE * DEFAUT_BUFFER) >= (GSourceSize - GByteAmount)) then LastBuffer := true;

 TimeStep := ((GetTickCount - GStartTime) div 1000);

 if LastBuffer or ((GByteAmount > 0) and (TimeStep > 0)) then
 begin
   if DFreeSpace > RequestSpace then Result := true;
 end
   else
 begin
   CountReadSecond := Trunc(GByteAmount / TimeStep);
   if (RequestSpace + CountReadSecond) < FreeSpace then Result := true
 end;

end;


if DFreeSpace > RequestSpace then Result := true;  И вот здесь возникает ошибка "Отказано в доступе"


han_malign ©   (01.11.18 17:42[1]

а может таки "Деление на ноль", а не "Отказано в доступе"?


superb0t ©   (02.11.18 16:29[2]

Ну так условиями значения с нулями отсекаются if LastBuffer or ((GByteAmount > 0) and (TimeStep > 0)) then


ivWasya   (04.11.18 18:31[3]

Так у Вас деление на TimeStep происходит по else


версия для печати

Написать ответ

Ваше имя (регистрация  E-mail 







Разрешается использование тегов форматирования текста:
<b>жирный</b> <i>наклонный</i> <u>подчеркнутый</u>,
а для выделения текста программ, используйте <code> ... </code>
и не забывайте закрывать теги! </b></i></u></code> :)


Наверх

  Рейтинг@Mail.ru     Титульная страница Поиск, карта сайта Написать письмо