Это не особенность языка, так как это ограничение физических процессорных архитектур, на которых выполняется код. Экран int
в C обычно является размером вашего стандартного регистра CPU. Больше кремния занимает больше места и больше мощности, поэтому во многих случаях арифметику можно выполнять только по типам «натурального размера». Это не универсально, но большинство архитектур все еще имеют это ограничение. Другими словами, при добавлении двух 8-битных чисел то, что на самом деле происходит в процессоре, это тип 32-разрядной арифметики, за которой следует либо простая битовая маска, либо другое подходящее преобразование типа.
Для большей части информации можно использовать класс DriveInfo .
using System;
using System.IO;
class Info {
public static void Main() {
DriveInfo[] drives = DriveInfo.GetDrives();
foreach (DriveInfo drive in drives) {
//There are more attributes you can use.
//Check the MSDN link for a complete example.
Console.WriteLine(drive.Name);
if (drive.IsReady) Console.WriteLine(drive.TotalSize);
}
}
}
Используйте Систему. Класс IO.DriveInfo http://msdn.microsoft.com/en-us/library/system.io.driveinfo.aspx
Проверьте класс DriveInfo и посмотрите, содержит ли он всю информацию, в которой Вы нуждаетесь.
А как насчет подключенных томов, для которых нет буквы диска?
foreach( ManagementObject volume in
new ManagementObjectSearcher("Select * from Win32_Volume" ).Get())
{
if( volume["FreeSpace"] != null )
{
Console.WriteLine("{0} = {1} out of {2}",
volume["Name"],
ulong.Parse(volume["FreeSpace"].ToString()).ToString("#,##0"),
ulong.Parse(volume["Capacity"].ToString()).ToString("#,##0"));
}
}