Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.10.2011, 19:31   #1
свр
Пользователь
 
Аватар для свр
 
Регистрация: 11.08.2009
Сообщений: 22
По умолчанию Странности с получением имени диска

Через GetVolumeInformation пытаюсь получить имя диска. Но выдавает он мне его не всегда. Причем я заметил, что если вручную переименовать диск, то программа все-таки выдает требуемое имя. В чем может быть проблема?

Код:
    Disks: DWORD;
    I, j: Integer;
    N: Integer;
    li: TListItem;
    buf: array [0..499] of WideChar;
    DrvStr: array [0..9] of char;
 SerialNum, MaxFNameLength, FileSysFlags: DWORD;
 VolName, FSName: Array [0..255] Of Char;

  lpVolumeNameBuffer,
    lpFileSystemNameBuffer: array[0..MAX_PATH] of Char;

  nVolumeNameSize, lpVolumeSerialNumber,
    lpMaximumComponentLength, lpFileSystemFlags,
    nFileSystemNameSize: DWord;
begin
  if Form2.ListView1.Items.Count>0 then begin
    Form2.ListView1.Items.Clear();
  end;
    Disks:= GetLogicalDrives;
    I:= 1; N:= Ord('A');
    Form2.ListView1.Items.BeginUpdate();
    WHILE I > 0 DO Begin
        IF (Disks AND I) <> 0 THEN begin
          li := Form2.listView1.Items.Add();
  nVolumeNameSize:=255;
          if not GetVolumeInformation(
    PWideChar(chr(n) + ':\'),
    lpVolumeNameBuffer,
    nVolumeNameSize,
    @lpVolumeSerialNumber,
    lpMaximumComponentLength,
    lpFileSystemFlags,
    lpFileSystemNameBuffer,
    nFileSystemNameSize) then begin
            ShowMessage(SysErrorMessage(GetLastError));
            Form2.Edit1.Text:=chr(n);
          end;
          li.Caption := lpVolumeNameBuffer;
          li.Caption:=li.Caption + ' (' + chr(n) + ')';
          ShGetFileInfo(PChar(chr(n) + ':\'), 0, fi, SizeOf(fi), SHGFI_SYSICONINDEX or SHGFI_LARGEICON);
          li.ImageIndex := fi.iIcon;
        end;
        Inc(N);
        I:= I SHL 1;
    End;
    Form2.ListView1.Items.EndUpdate;
Пора бы уже и прочесть правила раздела...
А пока - штраф за неправильное оформление кода, за нежелание эти правила соблюдать.

Последний раз редактировалось mihali4; 19.10.2011 в 23:39.
свр вне форума Ответить с цитированием
Старый 19.10.2011, 23:42   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

По теме.
Это не имя диска. Это называется метка тома.
Код:
procedure TForm1.Button2Click(Sender: TObject);
var
  VolumeName,
  FileSystemName : array [0..MAX_PATH-1] of Char;
  VolumeSerialNo : DWord;
  MaxComponentLength,FileSystemFlags: Cardinal;
begin
  GetVolumeInformation('C:\',VolumeName,MAX_PATH,@VolumeSerialNo,
  MaxComponentLength,FileSystemFlags, FileSystemName,MAX_PATH);
  Memo1.Lines.Add('VolumeName = '+VolumeName);
  Memo1.Lines.Add('SerialNo = $'+IntToHex(VolumeSerialNo,8));
  Memo1.Lines.Add('CompLen = '+IntToStr(MaxComponentLength));
  Memo1.Lines.Add('Flags = $'+IntToHex(FileSystemFlags,4));
  Memo1.Lines.Add('FSName = '+FileSystemName);
end;
mihali4 вне форума Ответить с цитированием
Старый 20.10.2011, 17:45   #3
свр
Пользователь
 
Аватар для свр
 
Регистрация: 11.08.2009
Сообщений: 22
По умолчанию

Не получается

VolumeName =
SerialNo = $6C2BB082
CompLen = 255
Flags = $3E700FF
FSName = NTFS
свр вне форума Ответить с цитированием
Старый 20.10.2011, 17:53   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

дык а у диска есть метка?
Локальный диск это не метка, а то что проводник пишет вместе нее.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 20.10.2011, 18:01   #5
свр
Пользователь
 
Аватар для свр
 
Регистрация: 11.08.2009
Сообщений: 22
По умолчанию

А-а. То есть, у диска вполне может не быть метки?
свр вне форума Ответить с цитированием
Старый 20.10.2011, 18:03   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

ну да, это дополнительный аттрибут, не более.
Локальный диск это отсутствие метки(так же сьемный диск и тп)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 20.10.2011, 18:21   #7
свр
Пользователь
 
Аватар для свр
 
Регистрация: 11.08.2009
Сообщений: 22
По умолчанию

Хорошо. Тогда 2 вопроса:
1) Как узнать тип диска (CD-ROM, сетевой и т.д.)
2) Как узнать имя сетевого диска (если возможно)
свр вне форума Ответить с цитированием
Старый 20.10.2011, 18:25   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 20.10.2011, 18:26   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

http://msdn.microsoft.com/en-us/libr...8VS.85%29.aspx
подойдет?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Странности с отступами evheniys HTML и CSS 7 06.06.2011 10:42
Странности с исключениями РагнаР Общие вопросы C/C++ 2 08.03.2011 22:56
странности с ICQ VovanZ Софт 7 19.06.2010 23:45
Проблема с получением имени zumm Общие вопросы Delphi 3 14.05.2010 13:06
Странности в Builder 6 Foxtrod C++ Builder 10 03.10.2009 01:09