I am programing under windows, c++, mfc How can I know disk's format by path such as "c:\". Does windows provide such APIs?
+8
A:
The Win32API function ::GetVolumeInformation is what you are looking for.
From MSDN:
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
);
Example:
TCHAR fs [MAX_PATH+1];
::GetVolumeInformation(_T("C:\\"), NULL, 0, NULL, NULL, NULL, &fs, MAX_PATH+1);
// Result is in (TCHAR*) fs
Coincoin
2009-08-10 01:25:20
+1
A:
GetVolumeInformation will give you what you need. It will return the name of the drive format in lpFileSystemNameBuffer.
If you want a nice wrapper around it, you might want to look at Microsoft's CVolumeMaster.
Martin
2009-08-10 01:28:29
+1
A:
The Win32_LogicalDisk class in WMI has a FileSystem Property that exposes that information.
EBGreen
2009-08-10 01:28:35
+2
A:
Yes it is 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;
}
adatapost
2009-08-10 01:34:07
Many Thanks~~~~
2009-08-10 02:21:24
You are welcome.
adatapost
2009-08-10 02:29:44