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; }
        }
Exemple #2
0
        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();
        }
Exemple #3
0
 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);
     }
 }