ГЛАВНАЯ     АРХИВ     НАПИСАТЬ АДМИНУ     ПОДПИСАТЬСЯ НА RSS     ВОЙТИ      

Поиск

Категории

Облако тегов

  << Предыдущий пост       Следующий пост >>  
От: inbruk
24. ноября 2010 03:14

В .Net Framework для получения информации о накопителе служит класс DriveInfo из пространства имен System.IO. У него есть статический метод GetDrives(), который позволяет получить массив объектов класса DriveInfo. Каждый из элементов массива соответствует накопителю информации или логическому диску на одном из накопителей. Каждый из возвращенных объектов содержит основную информацию о накопителе или логическом диске. Доступ к этой информации осуществляется через набор свойств только для чтения. Свойство Name возвращает имя накопителя в системе. Свойство DriveType возвращает тип накопителя. Накопитель может иметь следующие типы: фиксированный, CD-ROM, удаляемый (с возможностью изъятия) и т.п. Свойство IsReady возвращает признак готов ли накопитель к работе в данный момент. Если оно установленно в true, то накопитель готов к работе (вставлен) и можно получить информацию, через описанные позже свойства. Если свойство установленно в false, то накопитель не готов к работе (вынут) и описанные позже свойства нельзя использовать. Остальные свойства следующие. Свойство DriveFormat возвращает тип форматирования накопителя, например, NTFS или FAT32. Свойство Label возвращает метку накопителя (диска) в системе. Свойство RootDir позволяет получить класс описывающий корневой каталог накопителя. Свойство TotalSize позволяет получить полный размер накопителя или логического диска в байтах. Свойство TotalFreeSpace позволяет получить полный размер свободного места в байтах. Свойство AvailableFreeSpace позволяет получить доступный размер свободного места в байтах. AvailableFreeSpace отличается от TotalFreeSpace тем, что учитывает квоты места выделенного текущему пользователю. Следующий пример демонстрирует как получить информацию по всем накопителям в системе на C#.


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.IO;

namespace ConsoleApplication1
{


class Program
{
static void Main()
{
DriveInfo[] allDrives = DriveInfo.GetDrives();

Console.WriteLine("Count Of Available Drives = " + allDrives.Count());
foreach (DriveInfo currDrvInf in allDrives)
{
Console.Write("Name=" + currDrvInf.Name);
Console.Write(" DrvType=" + currDrvInf.DriveType.ToString());
if (currDrvInf.IsReady == true)
{
Console.Write(" DrvFormat=" + currDrvInf.DriveFormat);
Console.Write(" TotSize=" + currDrvInf.TotalSize.ToString());
Console.Write(" TotFreeSpace=" + currDrvInf.TotalFreeSpace.ToString());
Console.Write(" AvaFreeSpace=" + currDrvInf.AvailableFreeSpace.ToString());
Console.Write(" Label=" + currDrvInf.VolumeLabel);
Console.Write(" RootDir=" + currDrvInf.RootDirectory.FullName);
}
else
{
Console.Write(" Drive is not ready! Other information is not available !");
}

Console.WriteLine();
}
Console.ReadKey(true);
}
}
}


Дорогие запчасти мерседес - грамотные консультанты плюс быстрая доставка!

Когда-то готовился сдавать историю в институте. многие ответы нашёл тут

Похожие записи


Вопросы на собеседовании C#, Net, ASP.NET, SQL
Продолжая тему вопросов на собеседовании. Нашел еще одну подборку. Оригинал лежит здесь . Перенес, чтобы не затерялось. Есть вполне вменяемые ответы (хотя, на некоторые вопросы ответил бы по-другому). Ответы находятся после списка вопросов, я их не менял. 23. Что такое шаблон проектирования Model/View/Controller? Как и зачем его применяют? 2...

Способы заработка на сайте
На этом блоге было много постов про производство и раскрутку сайтов. Но пока не было про заработок на них. Пора исправить этот недочет. Здесь будут описаны по возможности не фантастичные, и не супер низко прибыльные способы. Также упор будет сделан именно на организацию процесса, а не технических деталях, которых в обилии в интернете. Несмотря на то, что как пр...

Silverlight, HTML5 и непрозрачная стратегия развития Microsoft
Оригинал статьи взят отсюда: Silverlight, HTML5 и непрозрачная стратегия развития Microsoft Автор: Peter Bright Переводчик: Mairon     По непонятным мне на данный момент причинам, похоже, что многие разработчики, присутствовавшие на недавней конференции PDC-2010 (Крупнейшая конференция Microsoft для разработчиков — Прим. переводчика), были сильн...

Комментарии

 
ushastiy.yasher 24.11.2010 20:19:37 #

Кстати, есть способ получить информацию по одному конкретному диску.
Внутри DriveInfo.GetDrives() используется Directory.GetLogicalDrives(), который возвращает массив строк, каждая из которых потом парсится в конструкторе класса DriveInfo. Вот это мясо:
[SecuritySafeCritical]
public DriveInfo(string driveName)
{
    if (driveName == null)
    {
        throw new ArgumentNullException("driveName");
    }
    if (driveName.Length == 1)
    {
        this._name = driveName + @":\";
    }
    else
    {
        Path.CheckInvalidPathChars(driveName);
        this._name = Path.GetPathRoot(driveName);
        if (((this._name == null) || (this._name.Length == 0)) || this._name.StartsWith(@"\\", StringComparison.Ordinal))
        {
            throw new ArgumentException(Environment.GetResourceString("Arg_MustBeDriveLetterOrRootDir"));
        }
    }
    if ((this._name.Length == 2) && (this._name[1] == ':'))
    {
        this._name = this._name + @"\";
    }
    char ch = driveName[0];
    if (((ch < 'A') || (ch > 'Z')) && ((ch < 'a') || (ch > 'z')))
    {
        throw new ArgumentException(Environment.GetResourceString("Arg_MustBeDriveLetterOrRootDir"));
    }
    string path = this._name + '.';
    new FileIOPermission(FileIOPermissionAccess.PathDiscovery, path).Demand();
}

а getter-ы свойств этого класса возвращают инфу on-demand, вызывая методы internal класса Win32Native. Так что можно получить информацию по одному диску просто сделав вот так:
var di = new DriveInfo("C");

mego-mozg 24.11.2010 23:11:46 #

Спасибо, хороший комментарий

Добавить комментарий




biuquote
  • Комментарий
  • Предпросмотр
Loading


  Сохранить комментарий