Требуется определить свободное место на диске..
Сначала хочу получить список всех дисков в системе, чтобы потом для каждого применить функцию GetDiskFreeSpaceEx()..
Как раз проблема с получением дисков..
#define MAX_PATH_SIZE 260
.......
wchar_t drive[MAX_PATH_SIZE]={0};
if (GetLogicalDriveStrings(MAX_PATH_SIZE,drive))
{
SendMessage(hListBox,LB_ADDSTRING, 0, (LPARAM)(LPCSTR)drive);
}
wchar_t drive[MAX_PATH_SIZE] = {0};
wchar_t Drives[3] = {0};
wchar_t *p;
if (GetLogicalDriveStringsW(MAX_PATH_SIZE, drive)) {
p = drive;
do {
wsprintfW(Drives, L"%s", p);
SendMessage(hListBox,LB_ADDSTRING, 0, (LPARAM)(LPCSTR)Drives);
// Memo1->Lines->Add(Drives);
while(*p++);
} while(*p);
}
При компиляции возникла вот такая ошибка:
Run-Time Check Failure #2 - Stack around the variable 'Drives' was corrupted.
Скажите пожалуйста, с чем это может быть связано?
Опять VC++ ... И Борланд С++ 2009 и GCC работают прекрасно (причем CodeGuard молчит как рыба, ничего не замечает... Так же как и CodeProfiler). Может, VC хочет
wchar_t Drives[4] = {0};, чтобы поместить в Drives и три символа, и нуль-терминатор?
wchar_t Drives[4] = {0};, чтобы поместить в Drives и три символа, и нуль-терминатор?
wchar_t szBuf[256]={},szStr[256]={};
ULARGE_INTEGER TotalNumberOfBytes;
ULARGE_INTEGER TotalNumberOfFreeBytes;
int nSelected = SendMessage(hListBox,LB_GETCURSEL,0,0);
SendMessage(hListBox,LB_GETTEXT,nSelected,(LPARAM)szBuf);
GetDiskFreeSpaceEx(szBuf,NULL,&TotalNumberOfBytes,&TotalNumberOfFreeBytes);
SendMessage(hEditTotal,WM_SETTEXT, 0,(LPARAM)(LPCSTR)TotalNumberOfBytes/1024);
//<-- error C2440:'type cast' : cannot convert from 'ULARGE_INTEGER' to 'LPCSTR'
//SendMessage(hEditFree,WM_SETTEXT, 0, (LPARAM)(LPCSTR)TotalNumberOfFreeBytes/1024);
GetDiskFreeSpaceEx(szBuf, NULL, &TotalNumberOfBytes, &TotalNumberOfFreeBytes);
wchar_t s[16] = {0};
// Я не думаю, что строка будет больше 10 символов (это уже терабайты),
// но на всякий случай оставляю 16 ...
wsprintf(s, L"%I64d", TotalNumberOfBytes.QuadPart/1024);
SendMessage(hEditTotal, WM_SETTEXT, 0, (LPARAM)(LPCSTR)s);
wsprintf(s, L"%I64d", TotalNumberOfFreeBytes.QuadPart/1024);
SendMessage(hEditFree, WM_SETTEXT, 0, (LPARAM)(LPCSTR)s);