2016-05-19 12 views
7

सी # System.IO.DriveInfo में संपत्ति DriveType है।किस प्रकार का ड्राइव "NoRootDirectory" है (System.IO.DriveType.NoRootDirectory)?

public enum DriveType 
{ 
    Unknown = 0, 
    // 
    // Summary: 
    //  The drive does not have a root directory. 
    NoRootDirectory = 1, 
    Removable = 2, 
    Fixed = 3, 
    Network = 4, 
    CDRom = 5, 
    Ram = 6, 
} 

मुझे लगता है कि यह एक ड्राइव अक्षर के बिना एक मात्रा है:

System.IO.DriveType एक enum है। लेकिन उपयोग:

System.IO.DriveInfo.GetDrives(); 

ड्राइव अक्षर के बिना मेरी मात्रा सूचीबद्ध नहीं करता है।

NoRootDirectory किसी अन्य प्रकार के वॉल्यूम/ड्राइव के लिए उपयोग किया जाता है या System.IO.DriveInfo.GetDrives() बस उन्हें नहीं दिखाता है?

+0

मुझे पता है कि यह असाइन किए गए ड्राइव अक्षरों के लिए उपयोग किया जाता है। आप निश्चित रूप से उन्हें 'GetDrives' के माध्यम से नहीं प्राप्त करेंगे, लेकिन 'नई प्रणाली.आईओ.ड्राइवइन्फो ("बी:")। ड्राइव टाइप या ऐसा करने का प्रयास करें। इसका उपयोग गैर-स्वरूपित विभाजन (या अज्ञात फाइल सिस्टम) के लिए भी किया जा सकता है, लेकिन मुझे पूरी तरह से यकीन नहीं है (आपको यह जांचना होगा कि आपको उस मामले में 'अज्ञात' या 'NoRootDirectory' मिलता है)। पूर्णता के लिए, आप 'HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ सत्र प्रबंधक \ DOS डिवाइस' पर जाकर कचरा ड्राइव भी बना सकते हैं और उदाहरण के लिए '\ Device \ Null' पर इशारा करते हुए ड्राइव' एक्स: 'बना सकते हैं और देख सकते हैं कि आपको क्या मिलता है उन लोगों के लिए। – CherryDT

+0

असल में, [अंतर्निहित WinAPI फ़ंक्शन 'GetDriveType'] के लिए प्रलेखन (https://msdn.microsoft.com/en-us/library/windows/desktop/aa364939 (v = vs.85) .aspx) थोड़ा सा है साफ। यह कहता है: "रूट पथ अमान्य है; उदाहरण के लिए, निर्दिष्ट पथ पर कोई वॉल्यूम नहीं है।" – CherryDT

+0

मैं "रूट पथ अमान्य है" के रूप में अनुवाद करता हूं "कर्नेल पथ' \ DosDevices \ X: 'पथ के लिए अनुरोध को हल करने में सक्षम वैध फाइल सिस्टम निर्देशिका ऑब्जेक्ट को हल/लिंक नहीं करता है। - शायद विंडोज कर्नेल ज्ञान के साथ किसी के द्वारा वाक्य लिखा गया था। इस मामले में मुझे लगता है कि उपरोक्त से मेरा "कचरा ड्राइव" आपको यह मूल्य भी देगा, साथ ही साथ किसी भी असाइन किए गए ड्राइव अक्षरों को भी देगा। – CherryDT

उत्तर

4

System.IO.DriveType.NoRootDirectory के लिए एक गुमराह पदनाम हो रहा है सभी ड्राइव के लिए

Testcode "यह ड्राइव अक्षर अप्रयुक्त है": सभी नहीं मिला ड्राइव प्रकार DriveType.NoRootDirectory है

foreach (char driveLetter in "ABCDEFGHIJKLMNOPQRSTUVWXYZ".ToArray()) 
{ 
    var driveInfo = new System.IO.DriveInfo(driveLetter.ToString() + ":\\"); 

    if(System.IO.DriveInfo.GetDrives().FirstOrDefault(o => o.Name[0] == driveLetter) == null) 
     Console.WriteLine("// Not found: " + driveInfo.Name + " has DriveType: " + driveInfo.DriveType.ToString()); 
    else 
     Console.WriteLine("//  found: " + driveInfo.Name + " has DriveType: " + driveInfo.DriveType.ToString()); 
} 

परिणाम:

// Not found: A:\ has DriveType: NoRootDirectory 
// Not found: B:\ has DriveType: NoRootDirectory 
//  found C:\ has DriveType: Fixed 
//  found D:\ has DriveType: CDRom 
// Not found: E:\ has DriveType: NoRootDirectory 
// Not found: F:\ has DriveType: NoRootDirectory 
// Not found: G:\ has DriveType: NoRootDirectory 
// Not found: H:\ has DriveType: NoRootDirectory 
// Not found: I:\ has DriveType: NoRootDirectory 
// Not found: J:\ has DriveType: NoRootDirectory 
// Not found: K:\ has DriveType: NoRootDirectory 
// Not found: L:\ has DriveType: NoRootDirectory 
// Not found: M:\ has DriveType: NoRootDirectory 
// Not found: N:\ has DriveType: NoRootDirectory 
// Not found: O:\ has DriveType: NoRootDirectory 
//  found P:\ has DriveType: Network 
// Not found: Q:\ has DriveType: NoRootDirectory 
//  found R:\ has DriveType: Network 
//  found S:\ has DriveType: Network 
// Not found: T:\ has DriveType: NoRootDirectory 
// Not found: U:\ has DriveType: NoRootDirectory 
//  found V:\ has DriveType: Network 
//  found W:\ has DriveType: Fixed 
//  found X:\ has DriveType: Network 
//  found Y:\ has DriveType: Network 
//  found Z:\ has DriveType: Network 

पूर्व उदाहरण (इस पोस्ट को संपादित करने से पहले):

लेकिन: यह केवल एक ही पाया मामला है जिसमें NoRootDirectory प्रयोग किया जाता है। यह सवाल का जवाब नहीं देता है कि क्या अन्य नक्षत्र हैं जहां यह दिखाया जाएगा।

यहाँ परीक्षण कोड:

// J:\ is an unused drive letter 
var xDummy1 = new System.IO.DriveInfo("J:\\"); 
Console.WriteLine(xDummy1.Name);      // result: J:\ 
Console.WriteLine(xDummy1.DriveType);     // result: NoRootDirectory 
Console.WriteLine(xDummy1.IsReady);      // result: False 
// Console.WriteLine(xDummy1.DriveFormat); // would throw an DriveNotFoundException 
Console.WriteLine(System.IO.Directory.Exists("j:\\")); // result: False 


// S:\ is an mapped drive to a currently not available share 
var xDummy2 = new System.IO.DriveInfo("S:\\");   
Console.WriteLine(xDummy2.Name);      // result: S:\ 
Console.WriteLine(xDummy2.DriveType);     // result: Network 
Console.WriteLine(xDummy2.IsReady);      // result: False 
// Console.WriteLine(xDummy2.DriveFormat); // would throw an IOException 
Console.WriteLine(System.IO.Directory.Exists("S:\\")); // result: False 

मैं ड्राइव का इस्तेमाल किया के साथ कुछ और संयोजनों का परीक्षण किया है, लेकिन मौजूद नहीं है, लेकिन उनमें से कोई भी NoRootDirectory लौट आए।

+0

@ हंसपैसेंट यह मैंने परीक्षण किया है। संपादन को देखो। – boboes

+0

NTFS में किसी फ़ोल्डर में आरोहित विभाजन का सामना करते समय यह कैसे व्यवहार करता है? –

0
//Check fixed local drive 
string path= "C\MyFolder\myfile.txt"; 
string root = Path.GetPathRoot(path); 

if (DriveInfo.GetDrives().FirstOrDefault(d => d.Name == root).DriveType == DriveType.Fixed) 
{ 
    MessageBox.Show(root); 
} 
+4

स्टैक ओवरफ़्लो में आपका स्वागत है! इस कोड स्निपेट के लिए धन्यवाद, जो कुछ तत्काल सहायता प्रदान कर सकता है। एक उचित स्पष्टीकरण [बहुत सुधार होगा] (// meta.stackexchange.com/q/114762) दिखाकर इसका शैक्षिक मूल्य * क्यों * यह समस्या का एक अच्छा समाधान है, और भविष्य के पाठकों के लिए इसे और अधिक उपयोगी बना देगा, लेकिन समान नहीं, प्रश्न। स्पष्टीकरण जोड़ने के लिए कृपया अपना उत्तर संपादित करें, और संकेत दें कि कौन सी सीमाएं और धारणाएं लागू होती हैं। –

संबंधित मुद्दे