دوست عزیز داشتم توی کد یه برنامه چرخ میزدم که تابعی به نام GetLogicalDriveStringsA برخودم و کمی باهاش ور رفتم تا بهترین روش را برای کاری که شما می خواهید انجام دهید را پیدا کنم به مد زیر توجه کنید:
byte N=GetLogicalDriveStringsA(52,(char*)new char[52])/4;
ShowMessage(N);
N در عبارت بالا نشان دهنده تعداد دریو هاست.
توضیح بیشتر:
تابع
DWORD GetLogicalDriveStrings(DWORD nBufferLength, char* lpBuffer);
میتونه نام درایو های موجود را به صورت رشته ای متصل به هم بر میگردونه.
متغییر اول طول رشته ای که باید تو متغیر دوم(که از نوع Pointer است)نوشته بشه.
متغییر دوم یک pointer است که باید رشته حاوی نام درایو ها است که هر دریوا ۴ کاراکتر را اشغال میکنه
(مثل:A:\0)که منظور از "0\" یک کاراکتر خالی است دقت کنید مقدار ان صفر است که در پایان رشته ها وجود دارد.
مقدار بازگشتی مقداری عددی است که طول رشت که در متغییر دوم نوشته شده را نشان میدهد.
امید وارم موفق باشید.