Вопрос: Как узнать размер свободного места на сетевом диске, если путь к файлу указан как сетевой \\comp\folder\?
Ответ :
На основе примера из SDK узнать количество свободного места на диске
можно так:
code:
--------------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
__int64 i64FreeBytesToCaller,i64TotalBytes,i64FreeBytes;
unsigned long dwSectPerClust,dwBytesPerSect,dwFreeClusters,dwTotalClusters;
int fResult;
typedef int (__stdcall *Ptr)(char *,PULARGE_INTEGER,PULARGE_INTEGER,PULARGE_INTEGER);
Ptr pGetDiskFreeSpaceEx;
char *pszDrive=Edit1->Text.c_str(); //Директория "//aaa/bbb/" или "C:\"
pGetDiskFreeSpaceEx =(Ptr)GetProcAddress( GetModuleHandle("kernel32.dll"),
"GetDiskFreeSpaceExA");
if (pGetDiskFreeSpaceEx)
{
fResult = pGetDiskFreeSpaceEx (pszDrive,
(PULARGE_INTEGER)&i64FreeBytesToCaller,
(PULARGE_INTEGER)&i64TotalBytes,
(PULARGE_INTEGER)&i64FreeBytes);
if(!fResult)return;
// Process GetDiskFreeSpaceEx results.
Memo1->Lines->Add(Edit1->Text);
Memo1->Lines->Add("FreeBytesToCaller:"+IntToStr(i64FreeBytesToCaller));
Memo1->Lines->Add("TotalBytes:"+IntToStr(i64TotalBytes));
Memo1->Lines->Add("FreeBytes:"+IntToStr(i64FreeBytes));
}
else
{
fResult = GetDiskFreeSpace (pszDrive,
&dwSectPerClust,
&dwBytesPerSect,
&dwFreeClusters,
&dwTotalClusters);
if(!fResult)return;
// Process GetDiskFreeSpace results.
Memo1->Lines->Add(Edit1->Text);
Memo1->Lines->Add("SectPerClust:"+IntToStr(dwSectPerClust));
Memo1->Lines->Add("BytesPerSect:"+IntToStr(dwBytesPerSect));
Memo1->Lines->Add("FreeClusters:"+IntToStr(dwFreeClusters));
Memo1->Lines->Add("TotalClusters:"+IntToStr(dwTotalClusters));
}
}
--------------------------------------------------------------------------------
(c) 2003 Borland X Portal
|