Я работаю над проектом-установщиком, где мне нужно извлечь файлы на диск. Как я могу вычислить/найти дисковое пространство на жестком диске с помощью С#?
Как рассчитать свободное место на диске?
Ответ 1
http://msdn.microsoft.com/en-us/library/system.io.driveinfo.totalfreespace.aspx
Скопировано по ссылке
using System;
using System.IO;
class Test
{
public static void Main()
{
DriveInfo[] allDrives = DriveInfo.GetDrives();
foreach (DriveInfo d in allDrives)
{
Console.WriteLine("Drive {0}", d.Name);
Console.WriteLine(" File type: {0}", d.DriveType);
if (d.IsReady == true)
{
Console.WriteLine(" Volume label: {0}", d.VolumeLabel);
Console.WriteLine(" File system: {0}", d.DriveFormat);
Console.WriteLine(
" Available space to current user:{0, 15} bytes",
d.AvailableFreeSpace);
Console.WriteLine(
" Total available space: {0, 15} bytes",
d.TotalFreeSpace);
Console.WriteLine(
" Total size of drive: {0, 15} bytes ",
d.TotalSize);
}
}
}
}
Ответ 2
Используйте класс System.IO.DriveInfo
. Доступны два варианта: один, который учитывает дисковые квоты:
var drive = new DriveInfo("c");
long freeSpaceInBytes = drive.AvailableFreeSpace;
и тот, который просто предоставляет полное свободное пространство:
var drive = new DriveInfo("c");
long freeSpaceInBytes = drive.TotalFreeSpace;
Ответ 3
Вы также можете использовать WMI.
http://msdn.microsoft.com/en-us/library/windows/desktop/aa394173 (v = vs .85).aspx
using System;
using System.Management;
class Test
{
static void Main()
{
var moCollection = new ManagementClass("Win32_LogicalDisk").GetInstances();
foreach (var mo in moCollection)
{
if (mo["DeviceID"] != null && mo["DriveType"] != null && mo["Size"] != null && mo["FreeSpace"] != null)
{
// DriveType 3 = "Local Disk"
if (Convert.ToInt32(mo["DriveType"]) == 3)
{
Console.WriteLine("Drive {0}", mo["DeviceID"]);
Console.WriteLine("Size {0} bytes", mo["Size"]);
Console.WriteLine("Free {0} bytes", mo["FreeSpace"]);
}
}
}
}
}
Ответ 4
Вам нужно заботиться? Просто напишите файлы на диск и обработайте ошибки по мере необходимости - он предположил, что вам придется выполнять откаты в любом случае, если произойдет что-то не связанное с космосом, поэтому просто относитесь к "без дискового пространства" как к еще одной ошибке, откат для.
Обновление: Если вы пришли сюда, чтобы снизить этот правильный ответ, оставьте комментарий о том, почему.