Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Системное программирование и WinAPI > GetDiskFreeSpaceEx |
Автор: rAccOOn 7.10.2009, 09:22 | ||
Здраствуйте, вот код
Вообщем при нажатии на кнопку, програма выводит список разделов, при попытке получить обьем памяти вообе, обьема свободной и обьема занятой выводит какие то не понятные числа. http://www.picamatic.com/view/5431326_Безымянный/ Подскажите кто может где я ошибаюсь и как это исправить |
Автор: jonie 7.10.2009, 09:31 |
http://msdn.microsoft.com/en-us/library/aa383742%28VS.85%29.aspx ULARGE_INTEGER это НЕ unsigned long тип. sizeof(long) = 4 (на x86 , впрочем и на x64 в видении майкрософта тоже 4), у вас странно что вообще не вылетает все нафиг, т.к. вы перещаписываете буфер. |
Автор: xvr 7.10.2009, 12:22 |
Кстати, ваш GetDiskFreeSpaceEx всегда возвращает свободное место на диске D: (см его первый параметр). Это так и было задумано? |
Автор: rAccOOn 7.10.2009, 17:48 | ||||
Да, я хотел выводить пока тока диск D, п потом когда уже пойму как это делать то можна будет и поменять. Добавлено @ 18:02
Теперь же при выводе получаються вот такие значения http://www.picamatic.com/view/5435891_Безымянный/ Хотя у меня на диске D: 476937 метров общий обьем. Возможно я не так преобразовую полученые данные, но если убрать преобразование полностью то вылазиет 3 ошибки о том что при переводе могут потеряться данные. и у меня появилась мысль о том что может надо переводить не в char а в какой то другой тип, или сделать надо что то еще или наоборот что то другое. PS: спасибо за разяснение на счет типов даных |
Автор: jonie 7.10.2009, 18:24 | ||
более того, itoa НЕ работает с __int64 данными, он преобразует ваш int64 к int и получает данные (с потерями, что немудрено)... |
Автор: rAccOOn 7.10.2009, 19:56 |
я просто не понял как его правильно использовать, и как его можна всунуть. Еси можете и вам не сложно напишите пример на одной из трех переменых. заранее спс |
Автор: dumb 8.10.2009, 08:59 | ||
|
Автор: rAccOOn 8.10.2009, 09:21 | ||
Может для этого надо еще какую то библеотеку подключить, потому что при компиленге вылазиет ошибка
Или обьявить его как то надо было. |
Автор: xvr 8.10.2009, 09:23 | ||||
Угу, VS2005 называется ![]() |
Автор: dumb 8.10.2009, 10:56 |
замени _stprintf_s на sprintf |
Автор: rAccOOn 8.10.2009, 11:00 |
аа, я пишу прогу на Visual C++ 6.0 Добавлено через 4 минуты и 57 секунд Страно, но теперь вообще ничего не выводится. |
Автор: rAccOOn 8.10.2009, 11:21 | ||
а при попытке вывести значения ed1, ed2, ed3 в лист бокс, он их выводит но тоже какие то неестественые числа
на выходе получаються числа http://www.picamatic.com/view/5443097_Безымянный/ получаеться числа немного изменились но до правды далековато. Но оно работает просто как то некоректно, потому что при попытке вывести ту же инфу о дисководе или о несуществующем разделе ничего не выводит. |
Автор: xvr 8.10.2009, 11:23 | ||||
У VS (в особенности у 6й) формат печати __int64 другой -
|
Автор: GremlinProg 8.10.2009, 11:39 | ||||||
http://msdn.microsoft.com/en-us/library/tcxf1dw6(VS.80).aspx
для беззнакового:
для знакового:
этот формат вроде бы поддерживался везде |
Автор: rAccOOn 8.10.2009, 21:15 | ||
Это конечно страно но не первый метод ни второй не дал результата
Посмотрите пожалуйста, вот это полный код програмы, возможно что то мишает выводу. Или может дето чего то не хватает поэтому ничего и не выводится. |
Автор: GremlinProg 8.10.2009, 23:43 |
а что ты ожидаешь от этого кода? ed1, ed2, ed3 тут вроде бы вообще не используются, ведь в них ты и сохраняешь результаты работы функции GetDiskFreeSpaceEx выведи их в memo или список или уж на худой конец - через _RPT, в консоль отладчика, чтобы увидеть их воочию или я что-то пропустил? |
Автор: rAccOOn 9.10.2009, 06:34 | ||
Ну к примеру вот так я выводил
и получал http://www.picamatic.com/view/5462320_Безымянный/ А вот Everest да и так еси посмотреть получаеться должно быть всего 50 006 мб, и свободно 14 с хвостом гиг. Но все равно в паредке вывода идет сначала общий обьем памяти потом свободный и доступный, а получаеться что общий меньше свободного и доступного а такого быть не может быть да и числа не те. А я ожидал что этот код мне выведет правильные значения, ну или хотя бы очень приближеное. |
Автор: smoke_man 9.10.2009, 08:18 | ||
Посмотри небольшой пример:
|
Автор: rAccOOn 9.10.2009, 13:21 |
спс, помогло. |
Автор: GremlinProg 9.10.2009, 13:36 |
серьезно? т.е. проблема заключалась только в передаче в sprintf структуры ULARGE_INTEGER? тогда ULARGE_INTEGER использовать предпочтительнее, а в sprintf нужно передавать Total.QuadPart Добавлено через 2 минуты и 4 секунды хотя щас только сообразил: в килобайтах размер может корректно вписываться в 32 бита, не затрагивая старшее двойное слово |