Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.06.2008, 07:53   #1
GrayCat
Новичок
Джуниор
 
Регистрация: 28.06.2008
Сообщений: 2
По умолчанию Определение свободного места в файле подкачки

Здравствуйте, уважаемые мастера Delphi.

Есть такая проблема:
Нужно определить размер и свободное место в файле подкачки Windows в WinXP SP2.

В нескольких местах в интернете я нашёл один и тот же код типа этого:

var
Status : TMemoryStatus;
begin
Status.dwLength := sizeof( TMemoryStatus );
GlobalMemoryStatus( Status );

{ Status.dwTotalPageFile: Объём страничного файла в байтах. }
{ Status.dwAvailPageFile: Свободного места в страничном файле. }

label11.Caption := ' Всего: ' + IntToStr(Status.dwTotalPageFile div 1024417) + ' Мб';
label12.Caption := ' Свободно: ' + IntToStr(Status.dwAvailPageFile div 1024417) + ' Мб';

Однако, он работает неверно, то есть показывает не размер и свободное место в файле подкачки Windows, а размер физической памяти + размер файла подкачки, причём, если отнять от получаемого этим кодом размера размер физической памяти, то полученный результат будет отличаться от фактического размера файла подкачки более чем на 100 Мб.

Нет ли другого способа получить вышеуказанные данные?
GrayCat вне форума Ответить с цитированием
Старый 30.06.2008, 11:37   #2
AIst
Пользователь
 
Аватар для AIst
 
Регистрация: 30.06.2008
Сообщений: 58
По умолчанию

была у меня подобная задача... вот код.
Код:
procedure TForm1.Button4Click(Sender: TObject);
var
MemInfo : TMemoryStatus;
begin
MemInfo.dwLength := Sizeof (MemInfo);
GlobalMemoryStatus(MemInfo);
memo1.lines.clear;
memo1.lines.add('Виртуальная память:');
memo1.lines.add('Всего:'+inttostr(MemInfo.dwTotalPageFile div 1024) + ' Kб');
memo1.lines.add('Используется: '+inttostr((MemInfo.dwTotalPageFile div 1024)-(MemInfo.dwAvailPageFile div 1024)) + ' Kб');
memo1.lines.add('Свободно: '+inttostr(MemInfo.dwAvailPageFile div 1024) + ' Kб');
end;
в юзес примерно так должно быть:
Код:
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls,ShellApi, Menus;

Последний раз редактировалось AIst; 30.06.2008 в 15:43.
AIst вне форума Ответить с цитированием
Старый 30.06.2008, 19:22   #3
GrayCat
Новичок
Джуниор
 
Регистрация: 28.06.2008
Сообщений: 2
По умолчанию

Вы представили практически то же самое.
Я имел ввиду другой способ без использования TMemoryStatus
GrayCat вне форума Ответить с цитированием
Старый 01.07.2008, 08:26   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
другой способ без использования TMemoryStatus
А чем GlobalMemoryStatus не устроил? Вроде нормально работает...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Считывание с произвольного места в текстовом файле Alisa_1 Общие вопросы по Java, Java SE, Kotlin 2 02.11.2008 23:22
Как проверить количество свободного и занятого места на логическом диске SeRhy Общие вопросы Delphi 4 09.06.2008 15:39
В России нет места платным прогам KORN Свободное общение 79 07.01.2008 12:55
файл подкачки wegS Общие вопросы Delphi 7 15.11.2007 13:00
Нерациональное использование места.- Как побороть? WEB_bobby Microsoft Office Word 1 14.03.2007 20:47