.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" );
}
}