2008-11-13 22 views
13

में सभी उपलब्ध ड्राइव अक्षरों का आकलन करना मैं वीसी ++ का उपयोग कर विंडोज में सभी उपलब्ध ड्राइव अक्षरों (जो पहले से नहीं लिया गया है) की गणना करना चाहता हूं।विंडोज

मैं यह कैसे कर सकता हूं?

उत्तर

13

::GetLogicalDrives() मास्क में बिट्स के रूप में उपलब्ध (पढ़ा गया: उपयोग) ड्राइव की एक सूची देता है। इसमें मैप किए गए नेटवर्क ड्राइव शामिल होना चाहिए। इस प्रकार, आप बस बिट्स को खोजने के लिए बिट्स को चला सकते हैं, जिसका मतलब है कि कोई ड्राइव मौजूद नहीं है। यदि संदेह है, तो आप हमेशा ड्राइव के लिए ::GetDriveType() ड्राइव कोड + ":\" (":\\" सी कोड में, या _T(":\\") यूनिकोड-जागरूक शब्दावली में) के साथ कॉल कर सकते हैं, और यदि ड्राइव उपलब्ध है तो उसे DRIVE_UNKNOWN या DRIVE_NO_ROOT_DIR वापस करना चाहिए।

+0

हाँ, यह GetLogicalDriveStrings से आसान है! – Alnitak

6

GetLogicalDriveStrings आपको वर्तमान में उपयोग किए गए ड्राइव अक्षरों की सूची मिल सकता है।

GetVolumeInformation का उपयोग किसी विशिष्ट ड्राइव के बारे में अधिक जानकारी प्राप्त करने के लिए किया जा सकता है।

1

GetLogicalDrives और GetLogicalDriveStrings एक अलग नामस्थान में बनाए गए नेटवर्क ड्राइव नहीं देख रहे हैं।

उदाहरण के लिए स्थानीय सिस्टम के अंतर्गत चल रही किसी सेवा से फ़ंक्शंस को कॉल करना लॉग इन उपयोगकर्ता द्वारा बनाए गए नेटवर्क ड्राइव को नहीं देखेगा।

यह विंडोज एक्सपी से शुरू हो रहा है। निम्न आलेख इस मामले में बताता है: http://msdn.microsoft.com/en-us/library/windows/desktop/aa363908(v=vs.85).aspx

+0

यह क्यों मायने रखता है? आप ड्राइव अक्षरों का दोबारा उपयोग कर सकते हैं इससे कोई फर्क नहीं पड़ता कि अन्य उपयोगकर्ताओं ने उन्हें परिभाषित किया है, और सवाल केवल उपयोग करने योग्य अक्षरों के लिए आवश्यक है। – SilverbackNet

3

इम नहीं shure उन्हें गणना करने में कैसे या अगर यह दृश्य ग पर संकलित कर देगा ++ लेकिन मैं देव सी ++ या कोड ब्लाकों पर इस स्ट्रम कोडित क्या ड्राइव CreateFile का उपयोग करके पहुंच योग्य है की जाँच करने के लिए और GetDriveType का उपयोग करके किस प्रकार का ड्राइव है। प्रोग्राम ए से ज़ेड तक ड्राइव करता है:

#include <windows.h> 
#include <cstring> 
#include <sstream> 
#include <iostream> 

using namespace std; 

int __stdcall WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR lpCmdLine, INT nShowCmd) 
{ 
    HANDLE hDevice = NULL; 
    HANDLE fileFind = NULL; 
    while(true) 
    { 
     Sleep(3005); 
     char drv='A'; 
     while(drv!='[') 
     { 
      Sleep(105); 
      const char *charDrvCF; 
      const char *charDrv; 
      stringstream Str; 
      string drvStr; 
      Str<<drv; 
      Str>>drvStr; 
      string drvSpc=drvStr+":\\"; 
      string fCheck="\\\\.\\"; 
      string fhCheck=fCheck+drvStr+":"; 
      charDrvCF=fhCheck.c_str(); 
      charDrv=drvSpc.c_str();  
      hDevice=CreateFile(charDrvCF, 
           GENERIC_READ|GENERIC_WRITE, 
           FILE_SHARE_READ|FILE_SHARE_WRITE, 
           NULL, 
           OPEN_EXISTING, 
           0, 
           NULL); 
      if(hDevice!=INVALID_HANDLE_VALUE) 
      { 
       switch(GetDriveType(charDrv)) 
       { 
        case DRIVE_FIXED: 
        { 
         cout<<"Fixed drive detected: "<<charDrv<<endl; 
         break; 
        } 
        case DRIVE_REMOVABLE: 
        { 
         cout<<"Removable drive detected: "<<charDrv<<endl; 
         break; 
        } 
        case DRIVE_NO_ROOT_DIR: 
        { 
         cout<<"There is no volume mounted at the specified path. "<<charDrv<<endl; 
         break; 
        } 
        case DRIVE_REMOTE: 
        { 
         cout<<"The drive is a remote (network) drive. "<<charDrv<<endl; 
         break; 
        } 
        case DRIVE_CDROM: 
        { 
         cout<<"The drive is a CD-ROM drive. "<<charDrv<<endl; 
         break; 
        } 
        case DRIVE_RAMDISK: 
        { 
         cout<<"The drive is a RAM disk. "<<charDrv<<endl; 
         break; 
        } 
        case DRIVE_UNKNOWN: 
        { 
         cout<<"The drive type cannot be determined. "<<charDrv<<endl; 
         break; 
        } 
       } 
      } 
     drv++; 
     } 
    } 
} 
+0

बहुत अधिक कोड लॉल – TheRealChx101