![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#7
|
||||
|
||||
![]() Вот, не парься:
Код:
function GetFreeDriveSpace(sDriveLetter, sSizeType: String): Int64; const CharString: String[26] = 'abcdefghijklmnopqrstuvwxyz'; var FreeBytesAvailableToCaller: Int64; FreeSize: Int64; TotalSize: Int64; btCounter: Byte; bContain: Boolean; begin Result := 0; sDriveLetter := LowerCase(sDriveLetter); SetLength(sDriveLetter,2); sDriveLetter[2] := ':'; bContain := False; for btCounter := 0 to 26 do begin if AnsiStartsText(CharString[btCounter],sDriveLetter) = True then begin bContain := True; Break; end; end; if bContain = False then begin Result := 0; Exit; end; GetDiskFreeSpaceEx(PChar(sDriveLetter),FreeBytesAvailableToCaller,Totalsize,@FreeSize); if LowerCase(sSizeType) = 'b' then begin Result := FreeBytesAvailableToCaller; end else if LowerCase(sSizeType) = 'kb' then begin Result := FreeBytesAvailableToCaller div 1024; end else if LowerCase(sSizeType) = 'mb' then begin Result := FreeBytesAvailableToCaller div 1048576; end else if LowerCase(sSizeType) = 'gb' then begin Result := FreeBytesAvailableToCaller div 1073741824; end else if LowerCase(sSizeType) = 'tb' then begin Result := FreeBytesAvailableToCaller div 1073741824; // написал в 2 строки, т.к. не помню, выйдет ли Result := Result div 1024; // за рамки допустимого число 1099511627776, так сказать, чтобы не рисковать =) end; end; Набросал на скорую руку (не проверял в делфе), можно сделать оптимизированнее. PS: в качестве параметра sDriveLetter передавай только букву диска, без двоеточия и слэша, т.е. не C:\ или C:, а просто C. в качестве параметра sSizeType передавай b,kb,mb,gb,tb - ну соответственно, результатом ф-ии будет размер в байтах, килобайтах, мегабайтах, гигабайтах или террабайтах. THE CRACKER IS OUT THERE Последний раз редактировалось 4kusNick, 26.09.2007 в 22:40. |