Предыстория: при потоковом копировании с диска на диск решил добавить функцию проверки свободного пространства на диске, но вот тут как стало глючить, вроде все правильно в коде, но вылетает ошибка постоянно.
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;
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; И вот здесь возникает ошибка "Отказано в доступе"