public ChangeDriveLetterForm(Volume volume) { InitializeComponent(); this.Font = SystemFonts.MessageBoxFont; this.Volume = volume; string currDrive = volume.DriveLetter2; if (currDrive == null) { btnOK.Text = "Add"; } else { cmbDriveLetter.Items.Add(""); } var drives = new List<string>(); for (char letter = 'A'; letter <= 'Z'; letter++) { drives.Add(letter.ToString() + ":"); } foreach (var drive in DriveInfo.GetDrives()) { var driveName = drive.Name.Substring(0, 2); if (driveName.Equals(currDrive, StringComparison.OrdinalIgnoreCase) == false) { drives.Remove(driveName); } } foreach (var drive in drives) { cmbDriveLetter.Items.Add(drive); } if (currDrive != null) { cmbDriveLetter.SelectedItem = currDrive; } }
public static IList<Volume> GetVolumesOnPhysicalDrive(int driveNumber) { var volumes = new List<Volume>(); var sb = new StringBuilder(50); var volumeSearchHandle = NativeMethods.FindFirstVolume(sb, sb.Capacity); if (volumeSearchHandle.IsInvalid == false) { do { var volume = new Volume(sb.ToString()); if (volume.PhysicalDriveNumber == driveNumber) { volumes.Add(volume); } } while (NativeMethods.FindNextVolume(volumeSearchHandle, sb, sb.Capacity)); } volumeSearchHandle.Close(); volumes.Sort( delegate(Volume volume1, Volume volume2) { if ((volume1.PhysicalDriveExtentOffset ?? -1) < (volume2.PhysicalDriveExtentOffset ?? -1)) { return -1; } else if ((volume1.PhysicalDriveExtentOffset ?? -1) > (volume2.PhysicalDriveExtentOffset ?? -1)) { return +1; } else { return 0; } } ); return volumes.AsReadOnly(); }
private static void ReceivedChangeDriveLetter(TinyPacket packet) { try { var volume = new Volume(packet["VolumeName"]); var newDriveLetter = packet["NewDriveLetter"]; if (string.IsNullOrEmpty(newDriveLetter)) { volume.RemoveLetter(); } else { volume.ChangeLetter(newDriveLetter); } } catch (Exception ex) { Medo.Diagnostics.ErrorReport.SaveToTemp(ex); throw new InvalidOperationException("Cannot change drive letter.", ex); } }