C# - Drive is not Ready (DriveInfo)

2.8k views Asked by At

I have this small problem with the DriveInfo Class. I know that the error is specific to the "IsReady" Property but I just don't know how to define it..

namespace Csp.Test.ConsoleApp
{
    public class Program
    {
        public static void Main()
        {
            //Create the server object - You will need create a list of the server objects.
            Server server = new Server();

            //Get all drives information
            List<DriveInfo> driveList = DriveInfo.GetDrives().ToList<DriveInfo>();

            //Insert information of one server - You will need get information of all servers
            server.ServerID = 0; //Here is necessery put PK key. I recommend doing the SQL server will automatically generate the PK.
            server.ServerName = string.Concat("Server ", driveList.Count);

            //Inserts information in the newServers object
            for (int i = 0; i < driveList.Count; i++)
            {
                ServerDrive serverDrives = new ServerDrive();

                //Put here all the information to obeject Server                
                serverDrives.DriveLabel = driveList[i].Name;
                serverDrives.TotalSpace = driveList[i].TotalSize;
                serverDrives.DriveLetter = driveList[i].VolumeLabel;
                serverDrives.FreeSpace = driveList[i].TotalFreeSpace;

                //      server.ListServerDrives.Add(serverDrives);
                server.ServerDrives.Add(serverDrives);
            }

            //Add the information to an SQL Database using Linq.
            DataClasses1DataContext db = new DataClasses1DataContext(@"sqlserver");
            //   db.Servers.InsertAllOnSubmit(server);
            db.Servers.InsertOnSubmit(server);
            db.SubmitChanges();
        }

Any help would be greatly appreciated.

1

There are 1 answers

2
Eren Ersönmez On BEST ANSWER

Change the following line:

List<DriveInfo> driveList = DriveInfo.GetDrives().Where(x=>x.IsReady).ToList();

Note that you can still get an IOException if the drive state changes between getting the drives list and querying the DriveInfo, so it is best you use a try-catch when accessing the DriveInfo.