Конференция "Начинающим" » Тупая ошибка не могу разобраться почему
 
  • superb0t © (31.10.18 19:01) [0]
    Предыстория: при потоковом копировании с диска на диск решил добавить функцию проверки свободного пространства на диске, но вот тут как стало глючить, вроде все правильно в коде, но вылетает ошибка постоянно.  
     

    // 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
 
Конференция "Начинающим" » Тупая ошибка не могу разобраться почему
Есть новые Нет новых   [134427   +34][b:0][p:0.002]