.NET Framework

DriveInfoクラスのDriveFormatプロパティを参照することで、ドライブのファイルシステムを"NTFS"や"FAT"などの文字列で取得できる。 なおリムーバブルドライブでは、ディスク等がセットされていない状態でDriveFormatプロパティの値を取得しようとするIOExceptionがスローされるため、事前にIsReadyプロパティをチェックする必要がある。

using System;
using System.IO;

class Sample {
  static void Main()
  {
    foreach (var drive in DriveInfo.GetDrives()) {
      Console.Write("{0,-5} {1,-10}", drive.Name, drive.DriveType);

      if (drive.IsReady)
        Console.WriteLine(drive.DriveFormat);
      else
        Console.WriteLine("(not ready)");
    }
  }
}
Imports System
Imports System.IO

Class Sample
  Public Shared Sub Main()
    For Each drive As DriveInfo In DriveInfo.GetDrives()
      Console.Write("{0,-5} {1,-10}", drive.Name, drive.DriveType)

      If drive.IsReady
        Console.WriteLine(drive.DriveFormat)
      Else
        Console.WriteLine("(not ready)")
      End If
    Next
  End Sub
End Class
実行結果の例
C:\   Fixed     NTFS
D:\   Fixed     NTFS
M:\   Network   NTFS
Q:\   CDRom     (not ready)

Win32 API

GetVolumeInformationを使ってボリューム情報を取得することで、ファイルシステムも取得できる。 ファイルシステムは"NTFS"や"FAT"などの文字列で取得できる。

// ボリューム情報を取得して、ファイルシステム名を取得する
char* drive = "C:\\";
char buffer[0x80];

if ( GetVolumeInformation( drive, NULL, 0, NULL, NULL, NULL, buffer, sizeof( buffer ) ) )
{
  // 取得したファイルシステム名を検証する
  printf( "%sのファイルシステムは", drive );

  if ( 0 == strcmp( "NTFS", buffer ) )
  {
    printf( "NTFSです\n" );
  }
  else if ( 0 == strcmp( "FAT", buffer ) )
  {
    printf( "FATです\n" );
  }
  else if ( 0 == strcmp( "CDFS", buffer ) )
  {
    printf( "CDFSです\n" );
  }
  else if ( 0 == strcmp( "UDF", buffer ) )
  {
    printf( "UDFです\n" );
  }
  else
  {
    printf( "未知のファイルシステムです\n" );
  }
}