2009-08-10 3 views
4

Je programme sous Windows, C++, mfc Comment puis-je connaître le format du disque par chemin comme "c: \". Windows fournit-il de telles API?Comment connaître le format d'un certain disque (FAT32 ou NTFS)

+0

GetVolumeInformation() peut vous dire si un volume prend en charge le cryptage/compression/etc Vous devez les liens physiques utiliser ces drapeaux, et non le nom du système de fichiers si vous devez vous assurer que le volume prend en charge une fonction spécifique. (Souvenez-vous que NTFS/FAT * ne sont pas les seuls systèmes de fichiers sur Windows, même s'ils sont les seuls supportés hors de la boîte) – Anders

Répondre

11

La fonction Win32API :: GetVolumeInformation est ce que vous cherchez.

De MSDN:

GetVolumeInformation Function

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, // Here 
    __in  DWORD nFileSystemNameSize 
); 

Exemple:

TCHAR fs [MAX_PATH+1]; 
::GetVolumeInformation(_T("C:\\"), NULL, 0, NULL, NULL, NULL, &fs, MAX_PATH+1); 
// Result is in (TCHAR*) fs 
2

GetVolumeInformation vous donnera ce dont vous avez besoin. Il renverra le nom du format de lecteur dans lpFileSystemNameBuffer.

Si vous voulez un bon emballage autour, vous pouvez regarder CVolumeMaster de Microsoft.

1

La classe Win32_LogicalDisk dans WMI possède une propriété FileSystem qui expose ces informations.

3

Oui c'est GetVolumeInformation.

TCHAR szVolumeName[100] = ""; 
TCHAR szFileSystemName[10] = ""; 
DWORD dwSerialNumber  = 0; 
DWORD dwMaxFileNameLength = 0; 
DWORD dwFileSystemFlags = 0; 

if(::GetVolumeInformation("c:\\", 
          szVolumeName, 
          sizeof(szVolumeName), 
          &dwSerialNumber, 
          &dwMaxFileNameLength, 
          &dwFileSystemFlags, 
          szFileSystemName, 
          sizeof(szFileSystemName)) == TRUE) 
    { 
    cout << "Volume name = " << szVolumeName << endl 
     << "Serial number = " << dwSerialNumber << endl 
     << "Max. filename length = " << dwMaxFileNameLength 
     << endl 
     << "File system flags = $" << hex << dwFileSystemFlags 
     << endl 
     << "File system name = " << szFileSystemName << endl; 
    } 
Questions connexes