ďťż

Ładny brzuch

Witam Serdecznie:)

Już nie raz mi pomogliście i mam nadzieje, że i w tym przypadku zrozumiem w co robię źle. Przejdę teraz do problemu: otóż "bawiąc" się sie w winapi chciałem sobie taki mini panel z prawej strony na pulpicie z takimi tam potrzebnymi mi rzeczami(np żeby miec szybki dostęp do daleko zakopanych katalogów które na pulpicie poprostu zrobiły by mi śmietnik) i aby ten panelek był fajniejszy chciałem sobie coś do niego jeszcze dołożyc więc postanowiłem, że bedą one mi wyświetlały m.in stan pamięci na partycjach. Problem tkwi w użyciu funkcji GetDiskFreeSpace(), utóż wiem jak jej użyc bo jest to (przynajmniej mi sie tak wydaje;p) ale przejdźmy do rzeczy wartościami typu DWORD jakie otrzymuje jest ilosc klastrów, bajtów na klaster, liczbe wolnych klastrów i wszystkich klastrów, tak więc aby obliczyc ilosc wolnego miejsca na danej partycji i ogólnego miejsca powinienem wykonac działania (klastry*bajty_na_klaster*ilosc_wolnych) i (klastry*bajty_na_klaster*ilosc_wszystkich) lecz wyniki wychodza błędne;/ nie jest to różnica kilku MB tylko po prostu są błędne. Jeśli ktoś może mi pomóc to bardzo dziękuje i prosił bym nie odsyłac do linków z pierwszych 3 stron z google.pl bo szukałem róznic w przykładach i wszystkie są takie same.

P.S. Jeśli wie ktos jak albo wie gdzie moge sie tego dowiedziec to prosił bym o podanie jakis informacji jak np odczytac zużycie procka i ramu:)

Z Góry Dziękuje i Pozdrawiam!

EDIT: dodaje jeszcze info ze pisze na podstawach c++
Użytkownik matijas6113 edytował ten post 14 marzec 2009, 13:22


delphiprocedure TForm1.Button1Click(Sender: TObject); var sc, bs, fc, tc:cardinal; wolne:int64; begin GetDiskFreeSpace('c:\',sc,bs,fc,tc); wolne:=sc*bs; wolne:=wolne*fc; ShowMessage(inttostr(wolne)+' bajtów'); end;

Dzięki za odpowiedź ale tak własnie robiłem;p nei wiem dlaczego wtedy wychodziły mi złe wyniki - może po prostu coś przy typach zmiennych źle zadziałało;/ jeśli chodzi o kod pod c++

long long int wolne;
DWORD sc,bs, fc,tc;
GetDiskFreeSpace("E:\\",&sc,&bs,&fc,&tc);
wolne=(sc*bs)/1024;
wolne=(wolne*tc)/1024;
ShowMessage(IntToStr(wolne)); //wynik podany w MB - troche źle zaokrągla

Może chodzi o tę marketingową sztuczkę, że producenci dysków za 1 GB uważają 1000 MB? Podziel przez 1000 zamiast 1024.



Czytać dokumentację! Jeśli chcecie odczytać ilość miejsca na dyskach większych niż 2 GB, to należy użyć GetDiskFreeSpaceEx. Możliwe, że to było powodem nieprawidłowych wartości.

Informacje o pamięci: GlobalMemoryStatus.

Wyniki tych funkcji dzielimy przez 1024.
Użytkownik Kozack edytował ten post 14 marzec 2009, 18:18
Dziekuje wam za odpowiedzi;) jeszcze jakby ktos mógł mi udzielic informacji na temat odczytu stanu ramu i procesora byłbym wdzieczny:) narazie szukam w msdn ale nie umie znalesc. Pozdro

Przeczytaj mój post jeszcze raz, to znajdziesz coś o pamięci.

Spoko jakoś mi to przeskoczyło;p THX ALL

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • zsf.htw.pl
  •