コード例 #1
0
        private bool DriveReady(DriveInfo d)
        {
            if (!d.IsReady)
            {
                if (!NotReadyList.Contains(d.Name))
                {
                    LogBox.Invoke(new Action(() => LogBox.Text += "Drive " + d.Name + " is not ready" + Environment.NewLine));
                    NotReadyList.Add(d.Name);
                    AlreadyReadDrives.Remove(d.Name);

                    RemovableDrivesList.Invoke(
                        new Action(() =>
                    {
                        ListViewItem lvi = RemovableDrivesList.FindItemWithText(d.Name);
                        if (lvi != null)
                        {
                            lvi.Remove();
                        }
                    })
                        );
                    NonRemovableDrivesList.Invoke(
                        new Action(() =>
                    {
                        ListViewItem lvi = NonRemovableDrivesList.FindItemWithText(d.Name);
                        if (lvi != null)
                        {
                            lvi.Remove();
                        }
                    })
                        );
                }
                return(false);
            }
            else
            {
                if (NotReadyList.Contains(d.Name))
                {
                    NotReadyList.Remove(d.Name);
                }
            }
            return(true);
        }
コード例 #2
0
        private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            Debug.WriteLine("bg worker started");

            while (true)
            {
                System.Threading.Thread.Sleep(500); // maybe make this a customizable setting

                var           RemovableDrives    = DriveInfo.GetDrives().Where(drive => drive.DriveType == DriveType.Removable);
                var           NonRemovableDrives = DriveInfo.GetDrives().Where(drive => drive.DriveType != DriveType.Removable);
                List <string> DrivesByName       = new List <string>();

                foreach (var d in RemovableDrives)
                {
                    if (!DriveReady(d))
                    {
                        continue;
                    }

                    RemovableDrivesList.Invoke(
                        new Action(() =>
                    {
                        ListViewItem lvi = RemovableDrivesList.FindItemWithText(d.Name);
                        if (lvi == null)
                        {
                            bool FindINF = false;
                            if (d.RootDirectory.GetFiles("Autorun.inf").Count() > 0)
                            {
                                FindINF = true;
                            }

                            string[] RowData = { d.VolumeLabel, d.DriveType.ToString(), d.DriveFormat, FindINF.ToString() };
                            RemovableDrivesList.Items.Add(d.Name).SubItems.AddRange(RowData);
                        }
                        DrivesByName.Add(d.Name);     // used to detect if drive was removed
                    }
                                   ));

                    if (!AlreadyReadDrives.ContainsKey(d.Name))
                    {
                        ReadAutoInfo(d.RootDirectory);
                        AlreadyReadDrives.Add(d.Name, d.VolumeLabel);
                    }
                }

                // remove drives from list that have been removed physically
                RemovableDrivesList.Invoke(
                    new Action(() =>
                {
                    List <ListViewItem> Tmplvi = new List <ListViewItem>();
                    foreach (ListViewItem lvi in RemovableDrivesList.Items)
                    {
                        Tmplvi.Add(lvi);
                    }
                    foreach (ListViewItem lvi in Tmplvi)
                    {
                        if (!DrivesByName.Contains(lvi.Text))         // if our listview item is no longer connected, remove it
                        {
                            AlreadyReadDrives.Remove(lvi.Text);
                            RemovableDrivesList.FindItemWithText(lvi.Text).Remove();
                        }
                    }
                })
                    );

                foreach (var d in NonRemovableDrives)
                {
                    if (!DriveReady(d))
                    {
                        continue;
                    }

                    try
                    {
                        bool FindINF = false;
                        if (d.RootDirectory.GetFiles("Autorun.inf").Count() > 0)
                        {
                            FindINF = true;
                        }

                        string[] RowData = { d.VolumeLabel, d.DriveType.ToString(), d.DriveFormat, FindINF.ToString() };

                        NonRemovableDrivesList.Invoke(
                            new Action(() => { if (NonRemovableDrivesList.FindItemWithText(d.Name) == null)
                                               {
                                                   NonRemovableDrivesList.Items.Add(d.Name).SubItems.AddRange(RowData);
                                               }
                                       })
                            );
                    }
                    catch (Exception err)
                    {
                        //MessageBox.Show(err.ToString());
                        LogBox.Invoke(new Action(() => LogBox.Text += "Drive " + d.Name + err.ToString() + Environment.NewLine));
                    }

                    if (Properties.Settings.Default != null)
                    {
                        if (Properties.Settings.Default.NonRemovableToo)
                        {
                            if (!AlreadyReadDrives.ContainsKey(d.Name))
                            {
                                ReadAutoInfo(d.RootDirectory);
                                AlreadyReadDrives.Add(d.Name, d.VolumeLabel);
                            }
                        }
                    }
                }
                //FirstRun = false;
            }
        }