Поиск:

Ответ в темуСоздание новой темы Создание опроса
> метка диска по сетевому имени 
V
    Опции темы
Domain
Дата 12.5.2010, 10:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 11.3.2010

Репутация: нет
Всего: нет



Всем привет. Как мне например по сетевому пути \\Gdm-alex\Install  узнать метку диска в котором находится каталог install. узнать информацию о этом диске:размер, свободное место и т.д. на я использовал DiskSize и DiskFree, но это если папка лежит на самом компьютере. а как быть если путь к папке по сети даже и не представляю..
PM MAIL   Вверх
Domain
Дата 12.5.2010, 21:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 11.3.2010

Репутация: нет
Всего: нет



хм. никто не знает или меня просто игнорируют)))?
PM MAIL   Вверх
Alca
Дата 12.5.2010, 21:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 25
Всего: 50



GetVolumeInformation ?

Добавлено @ 21:37
Цитата

Код

BOOL WINAPI GetVolumeInformation(
  __in_opt   LPCTSTR lpRootPathName,
  __out      LPTSTR lpVolumeNameBuffer,
  __in       DWORD nVolumeNameSize,
  __out_opt  LPDWORD lpVolumeSerialNumber,
  __out_opt  LPDWORD lpMaximumComponentLength,
  __out_opt  LPDWORD lpFileSystemFlags,
  __out      LPTSTR lpFileSystemNameBuffer,
  __in       DWORD nFileSystemNameSize
);


lpRootPathName [in, optional] 

A pointer to a string that contains the root directory of the volume to be described.

If this parameter is NULL, the root of the current directory is used. A trailing backslash is required. For example, you specify \\MyServer\MyShare as "\\MyServer\MyShare\", or the C drive as "C:\".


Это сообщение отредактировал(а) Alca - 12.5.2010, 21:38


--------------------
PM WWW ICQ Skype Jabber   Вверх
Domain
Дата 12.5.2010, 22:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 11.3.2010

Репутация: нет
Всего: нет



а пример использования можно? а то я с msdn не силен.
PM MAIL   Вверх
Alca
Дата 12.5.2010, 22:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 25
Всего: 50



Код

#define ARRAYSIZE(a) (sizeof(a)/sizeof(a[0]))

TCHAR volumeName[MAX_PATH + 1] = { 0 };
TCHAR fileSystemName[MAX_PATH + 1] = { 0 };
DWORD serialNumber = 0;
DWORD maxComponentLen = 0;
DWORD fileSystemFlags = 0;
if (GetVolumeInformation(
        _T("C:\\"),
        volumeName,
        ARRAYSIZE(volumeName),
        &serialNumber,
        &maxComponentLen,
        &fileSystemFlags,
        fileSystemName,
        ARRAYSIZE(fileSystemName)))
{
    _tprintf(_T("Volume Name: %s\n"), volumeName);
    _tprintf(_T("Serial Number: %lu\n"), serialNumber);
    _tprintf(_T("File System Name: %s\n"), fileSystemName);
    _tprintf(_T("Max Component Length: %lu\n"), maxComponentLen);
}



--------------------
PM WWW ICQ Skype Jabber   Вверх
Domain
Дата 13.5.2010, 18:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 11.3.2010

Репутация: нет
Всего: нет



Короче есть код. Получаю не то, что надо. где ошибка?

Код

BOOL TForm1::GetVolumeInformation(
  LPCTSTR lpRootPathName,
  LPTSTR lpVolumeNameBuffer,
  DWORD nVolumeNameSize,
  LPDWORD lpVolumeSerialNumber,
  LPDWORD lpMaximumComponentLength,
  LPDWORD lpFileSystemFlags,
  LPTSTR lpFileSystemNameBuffer,
  DWORD nFileSystemNameSize )
  { Label1->Caption=IntToStr(lpVolumeSerialNumber);
    Label2->Caption=lpRootPathName;
    Label3->Caption=lpVolumeNameBuffer;
    Label4->Caption=nFileSystemNameSize ;
  }

void __fastcall TForm1::Button1Click(TObject *Sender)
{

 LPCTSTR RootPathName = "\\Deathmashine1\\MUSIC\\";
 LPTSTR VolumeNameBuffer;
 DWORD nVolumeNameSize = 256;
 LPDWORD nVolumeSerialNumber = 0;
 LPDWORD MaximumComponentLength = 0;
 LPDWORD FileSystemFlags = 0;
 LPTSTR  FileSystemNameBuffer = 0;
 DWORD   FileSystemNameSize = 256;
 GetVolumeInformation(RootPathName,VolumeNameBuffer,nVolumeNameSize,VolumeSerialNumber,
 MaximumComponentLength,FileSystemFlags,FileSystemNameBuffer,FileSystemNameSize);

PM MAIL   Вверх
Alca
Дата 13.5.2010, 20:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 25
Всего: 50



Код

LPCTSTR RootPathName = _T("\\Deathmashine1\\MUSIC\\");



--------------------
PM WWW ICQ Skype Jabber   Вверх
Domain
Дата 13.5.2010, 23:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 11.3.2010

Репутация: нет
Всего: нет



компилятор на _T ругается...
PM MAIL   Вверх
Alca
Дата 13.5.2010, 23:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 25
Всего: 50



Код

#include <tchar.h>



--------------------
PM WWW ICQ Skype Jabber   Вверх
Domain
Дата 14.5.2010, 09:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 11.3.2010

Репутация: нет
Всего: нет



так а из какой переменной потом брать размер диска. я пробовал все и кроме 1, 0, 261.  я ничего не получаю. Alca Юзал твой код.
Код

BOOL TForm1::GetVolumeInformation(
  LPCTSTR lpRootPathName,
  LPTSTR lpVolumeNameBuffer,
  DWORD nVolumeNameSize,
  LPDWORD lpVolumeSerialNumber,
  LPDWORD lpMaximumComponentLength,
  LPDWORD lpFileSystemFlags,
  LPTSTR lpFileSystemNameBuffer,
  DWORD nFileSystemNameSize )
  {
   Label1->Caption= nFileSystemNameSize;
  }

void __fastcall TForm1::Button1Click(TObject *Sender)
{
#define ARRAYSIZE(a) (sizeof(a)/sizeof(a[0]))
TCHAR volumeName[MAX_PATH + 1] = { 0 };
TCHAR fileSystemName[MAX_PATH + 1] = { 0 };
DWORD serialNumber = 0;
DWORD maxComponentLen = 0;
DWORD fileSystemFlags = 0;
if (GetVolumeInformation(
        _T("\\\\Gdm-alex\\Install\\"),
        volumeName,
        ARRAYSIZE(volumeName),
        &serialNumber,
        &maxComponentLen,
        &fileSystemFlags,
        fileSystemName,
        ARRAYSIZE(fileSystemName)));
        //Label1->Caption=maxComponentLen;

}


Что-то скорее всего не так.
PM MAIL   Вверх
Alca
Дата 14.5.2010, 09:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 25
Всего: 50



Цитата

так а из какой переменной потом брать размер диска. 

 smile 
Цитата

я пробовал все и кроме 1, 0, 261.  

 smile 
Вопрос кажись был про метку диска???????  smile

Добавлено через 1 минуту и 24 секунды
Цитата

а как быть если путь к папке по сети даже и не представляю..

Цитата

GetVolumeInformation() requires an extra backslash with UNC names, so that the name has the form \\<SERVER>\<SHARE>\.



--------------------
PM WWW ICQ Skype Jabber   Вверх
xvr
Дата 14.5.2010, 11:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 48
Всего: 223



Цитата(Domain @ 13.5.2010,  18:16)
Короче есть код. Получаю не то, что надо. где ошибка?

Код

BOOL TForm1::GetVolumeInformation(
  LPCTSTR lpRootPathName,
  LPTSTR lpVolumeNameBuffer,
  DWORD nVolumeNameSize,
  LPDWORD lpVolumeSerialNumber,
  LPDWORD lpMaximumComponentLength,
  LPDWORD lpFileSystemFlags,
  LPTSTR lpFileSystemNameBuffer,
  DWORD nFileSystemNameSize )
  { Label1->Caption=IntToStr(lpVolumeSerialNumber);
    Label2->Caption=lpRootPathName;
    Label3->Caption=lpVolumeNameBuffer;
    Label4->Caption=nFileSystemNameSize ;
  }

Это сильно, это 5  smile Не надо в форме делать GetVolumeInformation (и особенно в таком виде), она уже есть в системе  smile 

PM MAIL   Вверх
Domain
Дата 14.5.2010, 19:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 11.3.2010

Репутация: нет
Всего: нет



Цитата

узнать информацию о этом диске:размер, свободное место и т.д

Внимательнее будьте. так к какому выводу мы пришли? Размер я не узнаю. И то есть код тоже как бы верный, только принять стоит во внимание что сказал  xvr. Так я понимаю?

Добавлено через 8 минут и 28 секунд
Код

 __int64 Total;
 __int64 Free;
 __int64 Avail;
 GetDiskFreeSpaceExA("\\\\Deathmashine1\\Downloads\\", reinterpret_cast<ULARGE_INTEGER*>(&Avail),
                             reinterpret_cast<ULARGE_INTEGER*>(&Total),
                             reinterpret_cast<ULARGE_INTEGER*>(&Free));
 // Ïîêàçàòü ðàçìåð äèñêà â áàéòàõ
 ShowMessage(IntToStr(Total));


показывает размер диска. код рабочий.
PM MAIL   Вверх
Domain
Дата 14.5.2010, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 11.3.2010

Репутация: нет
Всего: нет



в free будет свободное место на диске я так понял

Это сообщение отредактировал(а) Domain - 14.5.2010, 19:59
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.1177 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.