Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Как использовать API-функцию GetVolumeInformation


Автор: serEJa 11.5.2004, 09:41
Как использовать API-функцию GetVolumeInformation в C#
Полный(краткий пример) плииииз

Автор: Kurt 11.5.2004, 17:19
API-функцию?
Хм.. У меня сейчас рядом нету студии, но вроде так:
Код

using System;
using System.Runtime.InteropServices;
using System.Text;

namespace GetVolumeInformationTest
{

class GetVolumeInformationTest
{

 [DllImport("kernel32.dll")]
 public static extern long GetVolumeInformation(string strPathName,
  StringBuilder strVolumeNameBuffer,
  long lngVolumeNameSize,
  long lngVolumeSerialNumber,
  long lngMaximumComponentLength,
  long lngFileSystemFlags,
  StringBuilder strFileSystemNameBuffer,
  long lngFileSystemNameSize);


 [STAThread]
 static void Main()
 {
  //метка диска
  StringBuilder volname = new StringBuilder(256);
  //серийный номер диска
  long sn= new long();
  long maxcomplen = new long();//максимальное кол-во компонент
  long sysflags = new long();//сисемне флаги
  StringBuilder sysname = new StringBuilder(256);//файловая система
  GetVolumeInformation(@"C:\", volname, 256, sn, maxcomplen, sysflags, sysname,256);

 

  Console.WriteLine(@"The Volume name of C:\ is '" + volname.ToString() + "'");

  Console.Read();
  Console.Read();
  return;
 }
}
}


Обрати внимание - используется StringBuilder - ССЫЛОЧНЫЙ тип - ведь нам надо передавать ССЫЛКУ в dll.
Если бы мы использовали String, то ничего б не получили..
Все.
Надеюсь, хоть чем-то помогло..

Автор: serEJa 11.5.2004, 18:24
Спасибо за ответ.
Пойду попробую, Студия в бой biggrin.gif

Автор: serEJa 12.5.2004, 09:45
Немножко не получилось
метка диска берется ,а

серийный номер, файловая система нулевые
почему не знаю , функция действует правильно
помогите чем можете

Автор: Kurt 13.5.2004, 03:18
Блин, поторопился!
Забыл out добавить!
Извиняй, за дезинформацию.. smile.gif
Вот переделанный код:

Код

using System;
using System.Runtime.InteropServices;
using System.Text;
class GetVolumeInformationTest
{
[DllImport("kernel32.dll")]
public static extern int GetVolumeInformation(string strPathName,
 StringBuilder strVolumeNameBuffer,
 int lngVolumeNameSize,
 out int lngVolumeSerialNumber,
 out int lngMaximumComponentLength,
 out int lngFileSystemFlags,
 StringBuilder strFileSystemNameBuffer,
 int lngFileSystemNameSize);

[STAThread]
static void Main()
{
 const int MAX_SIZE = 256;
 //метка диска
 StringBuilder volname = new StringBuilder(MAX_SIZE);
 //серийный номер диска
 int sn;
 int maxcomplen;//максимальное кол-во компонент
 int sysflags;//системные флаги
 StringBuilder sysname = new StringBuilder(MAX_SIZE);//файловая система
 GetVolumeInformation(@"C:\", volname, MAX_SIZE, out sn, out maxcomplen, out sysflags, sysname,MAX_SIZE);
 Console.WriteLine(volname.ToString());
 Console.WriteLine(sn.ToString());
 Console.WriteLine(sysname.ToString());
 Console.Read();
 return;
}
}


Похоже?..

Автор: serEJa 14.5.2004, 11:17
Все тип-топ
Благодарю biggrin.gif

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)