Detekcja dysk z WMI - MSDN

0

witam robię detekcje dysku ale coś podaje mi zły rozmiar dysku
korzystam z tego przykładu http://msdn.microsoft.com/en-us/library/aa390423(VS.85).aspx
i tej klasy http://msdn.microsoft.com/en-us/library/aa394132(VS.85).aspx

robię to tak:

hr = pclsObj->Get(L"Size", 0, &vtProp, 0, 0);
wcout << "Rozmiar : " << vtProp.uintVal << endl;
VariantClear(&vtProp);

mam dysk 250GB jednak dostaje wynik 1500244(w bajtach)
pozdrawiam

0

no to jak dostajesz wynik w bajtach to raczej 250GB w incie się nie zmieści :>
nie znam tego obiektu z którym pracujesz, ale po nazwie pola uintVal wygląda na to, że wynik dostajesz w int 4 bajtowym, w 4 bajtach zmieścisz max rozmiar 4GB z kawałkiem

dla odczytania tak dużego rozmiaru potrzebne są min dwa int'y, rozmiar musi być podzielony na czterobajt(int) wyznaczający wyższe wartości i niższe, pewnie któryś z nich odczytujesz...

0

w 4 bajtach zmieścisz max rozmiar 4GB z kawałkiem

Z ujemnym kawałkiem, max to będzie 2^32-1 czyli po Twojemu 4GB-1 :|

0

zamieniłem UINT uintVal na ULONGLONG ullVal i teraz dostałem wynik 14757395255533170092
jednak to podzielone przez 1073741824(1GB) daje też zły wynik
może problem jest w tym że mam partycje linuxowa(20GB) i przez to sie gubi?
pozdrawiam

0

Nie zamieniaj na ślepo, tylko sprawdź jaki typ został zwrócony w variancie.

pclsObj->Get(L"Size", 0, &vtProp, 0, 0);
// typ jest w vtProp.vt a lista typów VT_** w wtypes.h -> enum VARENUM

Zawsze możesz przekonwertować wynik na string i wstawić go do msgboxa:

pclsObj->Get(...)
VariantChangeType((VARIANTARG*)&vtProp, (VARIANTARG*)&vtProp, 0, VT_BSTR);
MessageBoxW(0, vtProp.bstrVal, 0, 0);

Btw zobacz jakie typy zwraca szara funkcja GetDiskFreeSpaceEx...

0

dzięki wielkie, rzutowanie pomogło, pozdrawiam!

1 użytkowników online, w tym zalogowanych: 0, gości: 1