2009-08-10 149 views
4

我在Windows下編程,C++,MFC 我怎麼能知道通過路徑磁盤的格式,如「C:\」。 Windows提供這樣的API嗎?如何知道某個磁盤格式(是FAT32或NTFS)

+0

GetVolumeInformation()可以告訴你。 (請記住NTFS/FAT *在Windows中不唯一的文件系統,即使壽他們是支持開箱即用的唯一) – Anders 2009-08-10 17:20:10

回答

11

的Win32API函數:: GetVolumeInformation是你在找什麼。

從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 
); 

例子:

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

GetVolumeInformation會給你你所需要的。它將在lpFileSystemNameBuffer中返回驅動器格式的名稱。

如果你想圍繞它一個很好的包裝,你可能想看看微軟的CVolumeMaster

1

在WMI Win32_LogicalDisk類具有暴露該信息的文件系統屬性。

3

是的,它是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; 
    } 
相關問題