将类型字符串列表转换为DeviceInfo []

时间:2016-02-23 06:13:19

标签: c# driveinfo

是否可以将类型字符串列表转换为DeviceInfo []。我正在获取计算机上的逻辑驱动器列表并将其转换为列表以删除我的系统目录(我的操作系统目录)。现在我想将该列表转发回DeviceInfo [],因为我需要获得具有更多可用空间的逻辑驱动器。

DriveInfo[] drive = DriveInfo.GetDrives();
List<string> list = drive.Select(x => x.RootDirectory.FullName).ToList();
list.Remove(Path.GetPathRoot(Environment.SystemDirectory).ToString());

谢谢。

3 个答案:

答案 0 :(得分:2)

您不必执行Select()

DriveInfo[] driveFiltered = drive.Where(x => x.RootDirectory.FullName != Path.GetPathRoot(Environment.SystemDirectory).ToString()).ToArray();

编辑:

正如@MarkFeldman指出的那样,Path.GetPathRoot()会对DriveInfo[]上的所有项目进行评估。这对于这个特殊情况不会有所作为(除非你有几十个硬盘驱动器),但它可能会给你一个糟糕的LINQ习惯:)。有效的方法是:

string systemDirectory = Path.GetPathRoot(Environment.SystemDirectory).ToString();
DriveInfo[] driveFiltered = drive.Where(x => x.RootDirectory.FullName != systemDirectory).ToArray();

答案 1 :(得分:0)

为什么不使用这样的东西?

List<DriveInfo> list = DriveInfo.GetDrives().Where(x => x.RootDirectory.FullName != Path.GetPathRoot(Environment.SystemDirectory).ToString()).ToList();

这样可以避免转换为字符串列表,并保留原始DriveInfo []数组的类型。

答案 2 :(得分:0)

以下代码将显示最多可用空间;

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace ConsoleApplication11
{
    class Program
    {

        static void Main(string[] args)
        {
            long FreeSize = 0;
            DriveInfo[] drive = DriveInfo.GetDrives().Where(x =>
            {
                if (x.RootDirectory.FullName != Path.GetPathRoot(Environment.SystemDirectory).ToString() && x.AvailableFreeSpace >= FreeSize)
                {
                    FreeSize = x.AvailableFreeSpace; 
                    Console.WriteLine("{0}Size:{1}", x.Name, x.AvailableFreeSpace);
                    return true;
                }
                else
                {
                    return false;
                }
            }).ToArray();

            Console.ReadLine();

        }
    }
}

Screenshot 1