如何在不使用DriveInfo.GetDrives的情況下列出除DVD驅動器以外的所有磁盤?我使用的是Unity遊戲引擎,它在GetDrives上引發錯誤:列出除DVD驅動器以外的所有磁盤,而不使用DriveInfo.GetDrives
NotImplementedException:未實現所請求的功能。 System.IO.DriveInfo.WindowsGetDrives
我正在尋找解決方法。我讀過Winbase.h有一個DriveType枚舉,有什麼方法可以使用它嗎?
如何在不使用DriveInfo.GetDrives的情況下列出除DVD驅動器以外的所有磁盤?我使用的是Unity遊戲引擎,它在GetDrives上引發錯誤:列出除DVD驅動器以外的所有磁盤,而不使用DriveInfo.GetDrives
NotImplementedException:未實現所請求的功能。 System.IO.DriveInfo.WindowsGetDrives
我正在尋找解決方法。我讀過Winbase.h有一個DriveType枚舉,有什麼方法可以使用它嗎?
你不能不犧牲平臺獨立性。
以下將獲得全部驅動器。我不認爲有一個平臺無關的方式獲得「除DVD以外的所有驅動器」:
string[] drives = Directory.GetLogicalDrives();
您提到的Winbase.h。這就是C++,並且會將你與特定平臺(Windows)聯繫起來。你可以做到這一點,使用p/invoke,但你將不得不編寫平臺相關的代碼。我不會爲初學者推薦P/invoke。這是一個高級話題,可以很快得到解決。
「依賴於平臺」是什麼意思?你將不得不編寫Windows代碼,Linux代碼,Mac代碼以及代碼將運行的任何其他平臺。 Unity的賣點之一是你可以編寫代碼一次,並期望它在各種不同的平臺上運行相同。
感謝Amy的回答我的CR蒂蒙斯諮詢發現this post,公司經過測試,在Windows上工作,我會很感激,如果有人在Mac上可以檢查它是否工作太:
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))));
}
謝謝。在發佈之前,我在這裏發現了這個帖子https://bytes.com/topic/c-sharp/answers/257251-how-detect-hard-drives,但不知道要使用哪個命名空間,關於p/invoke的提示幫助了我想辦法。我還會爲其他Unity用戶發佈一個答案,以防鏈接失效。 – Absinthe
我很高興聽到我的回答很有幫助。 – Amy