Home > APIs > AppServer API > Examples > Asset Management > Query for Volume or Drive Letter
Query for Volume or Drive Letter
Query for Volume or Drive Letter
Below is sample code that shows you how to query for a system's drive letter(s). See why you don't want to hardcode the V: drive.
[C#] // setup a default volume string string volume = "V:"; // create a MediaMgr object IMediaMgr mediaMgr = iappServer.CreateMediaMgr(appName); // get a cookie to an XML list representation of all volumes (drive letters) on the K2 int count = 0; int cookie = mediaMgr.EnumerateVolumes(ref count); // loop thru all volume results int i = 0; string result = ""; int maxCount = 256; string xmlData = ""; count = maxCount; while (count == maxCount) { mediaMgr.GetXmlResults(cookie, i * maxCount, maxCount, ref count, out xmlData); result += xmlData; i++; } // uncomment if you want to see the XML version of the enumerated volumes // Console.WriteLine(result); // NOTE: make sure your close the results set when you are finished! This // releases a database selector. Each MediaMgr is allowed to use up to ten // database selectors. If you don't close them, you will run out of selectors // and your EnumerateX calls will fail. mediaMgr.CloseResults(cookie); // load the XML string into an XML document XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml(result); // need a namespace manager to parse the xml doc XmlNamespaceManager namespaceManager = new XmlNamespaceManager(xmlDoc.NameTable); namespaceManager.AddNamespace("ns", "x-schema:#Schema1"); // loop thru all volumes looking for a V: or C: drive letter XmlNodeList volumeList = xmlDoc.SelectNodes(("./Select/ns:Data/ns:Dataset"), namespaceManager); if (volumeList.Count > 0) { IEnumerator volumeNodeEnum = volumeList.GetEnumerator(); bool bMoreVolumes = volumeNodeEnum.MoveNext(); do { // look for the "DatasetName" (i.e drive letter) value. XmlNode volumeNode = (XmlNode)volumeNodeEnum.Current; string volumeName = volumeNode.Attributes.GetNamedItem("DatasetName").Value; // if we found a "V:" or "C:" value save it as the volume name if ( 0 == String.Compare( volumeName, "V:", true) || 0 == String.Compare( volumeName, "C:", true) ) { Console.WriteLine("Discovered drive " + volumeName); volume = volumeName; break; } bMoreVolumes = volumeNodeEnum.MoveNext(); } while (bMoreVolumes); } // if volumeList.Count > 0