不使用DriveInfo.GetDrives

时间:2017-02-01 17:42:56

标签: c# unity5

如何在不使用DriveInfo.GetDrives 的情况下列出除DVD驱动器以外的所有磁盘?我正在使用Unity游戏引擎,它会在GetDrives上引发错误:

  

NotImplementedException:未实现请求的功能。   System.IO.DriveInfo.WindowsGetDrives

我正在寻找解决方法。我已经读过Winbase.h有一个DriveType枚举,有什么方法可以使用它吗?

2 个答案:

答案 0 :(得分:1)

你不能,不能没有牺牲平台独立性。

以下内容将获取所有驱动器。我不认为有一种独立于平台的方式来获得“除DVD以外的所有驱动器”:

string[] drives = Directory.GetLogicalDrives();

你提到过Winbase.h。这是C ++,并将您绑定到特定平台(Windows)。您可以使用p / invoke 执行此操作,但您必须编写与平台相关的代码。我不建议初学者使用P / invoke。这是一个高级主题,很快就会变得困难。

“平台依赖”是什么意思?您必须编写Windows代码,Linux代码,Mac代码以及代码运行的任何其他平台。 Unity的一个卖点是你可以编写代码一次并期望它在各种不同的平台上运行。

答案 1 :(得分:0)

感谢Amy的回答,我发现CR Timmons Consulting,Inc。this post已经过测试并在Windows上工作,如果Mac上有人能检查它是否有效,我将不胜感激:< / p>

public enum DriveType : int
{
Unknown = 0,
NoRoot = 1,
Removable = 2,
Localdisk = 3,
Network = 4,
CD = 5,
RAMDrive = 6
}

[DllImport("kernel32.dll", CharSet = CharSet.Auto)]
public static extern int GetDriveType(string lpRootPathName);

使用示例:

using System;
using System.Runtime.InteropServices;

void GetDrives()
{
     foreach (string s in Environment.GetLogicalDrives())
     Console.WriteLine(string.Format("Drive {0} is a {1}.",
     s, Enum.GetName(typeof(DriveType), GetDriveType(s))));
}