//public string GetVolumeName(string letter) //{ // var r = RunLocal($"vol {letter}:"); // foreach (var line in r.Output.Split('\n')) // { // try // { // Match match = Regex.Match(line, $@"^\s*Volume in drive {letter} is ([^ ]+)"); // if (match.Success) // return match.Groups[1].Value.Trim(); // } // catch (Exception ex) // { // } // } // return ""; //} public ReturnBox CheckDriveStatus(Drive drive) { ReturnBox r = new ReturnBox { MountStatus = MountStatus.OK }; if (drive == null || (drive.Letter.ToCharArray()[0] < 'G' || drive.Letter.ToCharArray()[0] > 'Z')) { r.DriveStatus = DriveStatus.NOT_SUPPORTED; } else { Settings settings = LoadSettings(); UpdateDrives(settings); var free = FreeDrives.Find(x => x.Letter == drive.Letter) != null; var isGold = GoldDrives.Find(x => x.Letter == drive.Letter) != null; var disconnected = GoldDrives.Find(x => x.Letter == drive.Letter && x.Status == DriveStatus.DISCONNECTED) != null; var pathUsed = GoldDrives.Find(x => x.Letter != drive.Letter && x.MountPoint == drive.MountPoint && (x.Status != DriveStatus.DISCONNECTED && x.Status != DriveStatus.FREE)) != null; if (pathUsed) { r.MountStatus = MountStatus.BAD_DRIVE; r.DriveStatus = DriveStatus.MOUNTPOINT_IN_USE; r.Error = "Mount point in use"; } else if (free) { r.DriveStatus = DriveStatus.DISCONNECTED; } else if (disconnected) { r.DriveStatus = DriveStatus.DISCONNECTED; } else if (!isGold) { r.MountStatus = MountStatus.BAD_DRIVE; r.DriveStatus = DriveStatus.IN_USE; r.Error = "Drive in use"; } else if (!CheckIfDriveWorks(drive)) { r.MountStatus = MountStatus.BAD_DRIVE; r.DriveStatus = DriveStatus.BROKEN; r.Error = "Drive is broken"; } else { r.DriveStatus = DriveStatus.CONNECTED; } } r.Drive = drive; return(r); }