求获取盘符对应的硬盘好和分区号的代码!

时间:2022-10-11 19:10:31
比如电脑里有2块硬盘。C盘是第一块硬盘的第二分区盘号位1.2。D盘是第一硬盘的第三分钟盘号为1.3  E盘是第二硬盘的第一分区盘号为2.1.这个要用C语言怎么获取。最好是能给源码。我是新手。谢谢大家了!

25 个解决方案

#1


mSdn上找

#2


没有找到。不然也不来求助了

#4


引用 3 楼 bojie5744 的回复:
http://blog.csdn.net/bojie5744/article/details/38039827 获取盘符

不是简单的获取盘符。还需要获取到盘符对应的磁盘号。和分区号

#5


::GetLogicalDriveStrings

#6


引用 5 楼 tiger9991 的回复:
::GetLogicalDriveStrings

GetLogicalDriveStrings得到的是盘符吧.怎么去获取每个盘符对应的磁盘号和分区号呢

#7



//获取盘符
#include "stdafx.h"
#include <winsock2.h>
#pragma comment (lib,"ws2_32.lib")
#include <windows.h>
#include <stdlib.h>
#include <Winioctl.h>
#pragma pack(1)
#pragma  warning (disable:4786)
#include <map>
#include <string>
#include <iostream>
using namespace std;//头文件加载有多,自行删除一些无关的。
int _tmain(int argc, _TCHAR* argv[])
{
HANDLE hDrv = CreateFile(L"\\\\.\\C:",      //这里改变刚才获得的判断,这里确定为C盘,L"\\\\.\\D:"为获取D盘的盘符
GENERIC_READ,               
FILE_SHARE_READ |
FILE_SHARE_WRITE, 
NULL,           
OPEN_EXISTING,    
0,               
NULL);
if(!hDrv)
{
cout << "Error Can not open the Driver " << GetLastError();
return 0;
}
PARTITION_INFORMATION pinfo;
DWORD lpBytesReturned;
BOOL bSuccess = DeviceIoControl(
(HANDLE) hDrv,               
IOCTL_DISK_GET_PARTITION_INFO, 
NULL,                            
0,                              
(LPVOID) &pinfo,            
(DWORD) sizeof(pinfo),        
(LPDWORD) &lpBytesReturned,       
(LPOVERLAPPED) NULL     
);
CloseHandle(hDrv);
if(!bSuccess)
{
cout << "ERROR " << GetLastError();
return 0;
}
cout << pinfo.PartitionNumber;
while(1);
return 1;
}


#8


上面第一行注释打错,是获取分区号

#9


参考这个改一下吧:
#include <iostream>
#include <windows.h>
using namespace std; 

typedef struct _VOLUME_INFO
{

TCHAR chFlag;

DWORD dwDiskNumber;

}VOLUME_INFO, *PVOLUME_INFO;


//chFlag为对应磁盘的盘符
BOOL GetVolumeInfo(IN TCHAR chFlag, OUT PVOLUME_INFO pVolumeInfo)
{

TCHAR szVol[] = { '\\', '\\', '.', '\\', chFlag, ':', 0};

HANDLE hDrv = CreateFile(szVol, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);

if (INVALID_HANDLE_VALUE == hDrv)

{

return FALSE;

}

VOLUME_DISK_EXTENTS vde;

DWORD dwBytes;

BOOL bOK = DeviceIoControl(hDrv, IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS, NULL, 0,&vde, sizeof(vde), &dwBytes, NULL);

if (!bOK)

{

CloseHandle(hDrv);

return FALSE;

}

pVolumeInfo->chFlag = chFlag; //分区盘符

pVolumeInfo->dwDiskNumber = vde.Extents->DiskNumber; //分区所在硬盘编号,基于0,第一个硬盘的编号为0,第二个硬件的编号为1,如此类推

return TRUE;

}

int main()
{

for (TCHAR chFlag = 'A'; chFlag <= 'Z'; ++chFlag)
{
VOLUME_INFO pi = {0};
GetVolumeInfo(chFlag, &pi);
}
}

#10


http://www.cnblogs.com/qq78292959/archive/2012/06/12/2546914.html
可以利用这个来获取所有的磁盘字符串

#11


GetVolume系列函数  。。MSDN上面有

#12


引用 7 楼 bojie5744 的回复:

//获取盘符
#include "stdafx.h"
#include <winsock2.h>
#pragma comment (lib,"ws2_32.lib")
#include <windows.h>
#include <stdlib.h>
#include <Winioctl.h>
#pragma pack(1)
#pragma  warning (disable:4786)
#include <map>
#include <string>
#include <iostream>
using namespace std;//头文件加载有多,自行删除一些无关的。
int _tmain(int argc, _TCHAR* argv[])
{
HANDLE hDrv = CreateFile(L"\\\\.\\C:",      //这里改变刚才获得的判断,这里确定为C盘,L"\\\\.\\D:"为获取D盘的盘符
GENERIC_READ,               
FILE_SHARE_READ |
FILE_SHARE_WRITE, 
NULL,           
OPEN_EXISTING,    
0,               
NULL);
if(!hDrv)
{
cout << "Error Can not open the Driver " << GetLastError();
return 0;
}
PARTITION_INFORMATION pinfo;
DWORD lpBytesReturned;
BOOL bSuccess = DeviceIoControl(
(HANDLE) hDrv,               
IOCTL_DISK_GET_PARTITION_INFO, 
NULL,                            
0,                              
(LPVOID) &pinfo,            
(DWORD) sizeof(pinfo),        
(LPDWORD) &lpBytesReturned,       
(LPOVERLAPPED) NULL     
);
CloseHandle(hDrv);
if(!bSuccess)
{
cout << "ERROR " << GetLastError();
return 0;
}
cout << pinfo.PartitionNumber;
while(1);
return 1;
}



这代码是可以获取到分区号。但是遇到压缩出来的盘符时检测出来的结果就不对了下面是代码检测结果(不正确) 求获取盘符对应的硬盘好和分区号的代码!
下面是正确的结果
求获取盘符对应的硬盘好和分区号的代码!

#13


引用 12 楼 joysen21 的回复:
Quote: 引用 7 楼 bojie5744 的回复:


//获取盘符
#include "stdafx.h"
#include <winsock2.h>
#pragma comment (lib,"ws2_32.lib")
#include <windows.h>
#include <stdlib.h>
#include <Winioctl.h>
#pragma pack(1)
#pragma  warning (disable:4786)
#include <map>
#include <string>
#include <iostream>
using namespace std;//头文件加载有多,自行删除一些无关的。
int _tmain(int argc, _TCHAR* argv[])
{
HANDLE hDrv = CreateFile(L"\\\\.\\C:",      //这里改变刚才获得的判断,这里确定为C盘,L"\\\\.\\D:"为获取D盘的盘符
GENERIC_READ,               
FILE_SHARE_READ |
FILE_SHARE_WRITE, 
NULL,           
OPEN_EXISTING,    
0,               
NULL);
if(!hDrv)
{
cout << "Error Can not open the Driver " << GetLastError();
return 0;
}
PARTITION_INFORMATION pinfo;
DWORD lpBytesReturned;
BOOL bSuccess = DeviceIoControl(
(HANDLE) hDrv,               
IOCTL_DISK_GET_PARTITION_INFO, 
NULL,                            
0,                              
(LPVOID) &pinfo,            
(DWORD) sizeof(pinfo),        
(LPDWORD) &lpBytesReturned,       
(LPOVERLAPPED) NULL     
);
CloseHandle(hDrv);
if(!bSuccess)
{
cout << "ERROR " << GetLastError();
return 0;
}
cout << pinfo.PartitionNumber;
while(1);
return 1;
}



这代码是可以获取到分区号。但是遇到压缩出来的盘符时检测出来的结果就不对了下面是代码检测结果(不正确) 求获取盘符对应的硬盘好和分区号的代码!
下面是正确的结果
求获取盘符对应的硬盘好和分区号的代码!

自己根据实际情况优化下。

#14


收藏学习 求获取盘符对应的硬盘好和分区号的代码!

#15


引用 9 楼 fishion 的回复:
参考这个改一下吧:
#include <iostream>
#include <windows.h>
using namespace std; 

typedef struct _VOLUME_INFO
{

TCHAR chFlag;

DWORD dwDiskNumber;

}VOLUME_INFO, *PVOLUME_INFO;


//chFlag为对应磁盘的盘符
BOOL GetVolumeInfo(IN TCHAR chFlag, OUT PVOLUME_INFO pVolumeInfo)
{

TCHAR szVol[] = { '\\', '\\', '.', '\\', chFlag, ':', 0};

HANDLE hDrv = CreateFile(szVol, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);

if (INVALID_HANDLE_VALUE == hDrv)

{

return FALSE;

}

VOLUME_DISK_EXTENTS vde;

DWORD dwBytes;

BOOL bOK = DeviceIoControl(hDrv, IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS, NULL, 0,&vde, sizeof(vde), &dwBytes, NULL);

if (!bOK)

{

CloseHandle(hDrv);

return FALSE;

}

pVolumeInfo->chFlag = chFlag; //分区盘符

pVolumeInfo->dwDiskNumber = vde.Extents->DiskNumber; //分区所在硬盘编号,基于0,第一个硬盘的编号为0,第二个硬件的编号为1,如此类推

return TRUE;

}

int main()
{

for (TCHAR chFlag = 'A'; chFlag <= 'Z'; ++chFlag)
{
VOLUME_INFO pi = {0};
GetVolumeInfo(chFlag, &pi);
}
}

这段代码是获取到分区所在的硬盘编号。我需要的是分区所在的硬盘编号和分区编号.

#16


引用 13 楼 bojie5744 的回复:
Quote: 引用 12 楼 joysen21 的回复:

Quote: 引用 7 楼 bojie5744 的回复:


//获取盘符
#include "stdafx.h"
#include <winsock2.h>
#pragma comment (lib,"ws2_32.lib")
#include <windows.h>
#include <stdlib.h>
#include <Winioctl.h>
#pragma pack(1)
#pragma  warning (disable:4786)
#include <map>
#include <string>
#include <iostream>
using namespace std;//头文件加载有多,自行删除一些无关的。
int _tmain(int argc, _TCHAR* argv[])
{
HANDLE hDrv = CreateFile(L"\\\\.\\C:",      //这里改变刚才获得的判断,这里确定为C盘,L"\\\\.\\D:"为获取D盘的盘符
GENERIC_READ,               
FILE_SHARE_READ |
FILE_SHARE_WRITE, 
NULL,           
OPEN_EXISTING,    
0,               
NULL);
if(!hDrv)
{
cout << "Error Can not open the Driver " << GetLastError();
return 0;
}
PARTITION_INFORMATION pinfo;
DWORD lpBytesReturned;
BOOL bSuccess = DeviceIoControl(
(HANDLE) hDrv,               
IOCTL_DISK_GET_PARTITION_INFO, 
NULL,                            
0,                              
(LPVOID) &pinfo,            
(DWORD) sizeof(pinfo),        
(LPDWORD) &lpBytesReturned,       
(LPOVERLAPPED) NULL     
);
CloseHandle(hDrv);
if(!bSuccess)
{
cout << "ERROR " << GetLastError();
return 0;
}
cout << pinfo.PartitionNumber;
while(1);
return 1;
}



这代码是可以获取到分区号。但是遇到压缩出来的盘符时检测出来的结果就不对了下面是代码检测结果(不正确) 求获取盘符对应的硬盘好和分区号的代码!
下面是正确的结果
求获取盘符对应的硬盘好和分区号的代码!

自己根据实际情况优化下。

大神。不知道从什么地方入手。正常分区的基本都没问题。如果分区是从其他盘里压缩出来的就容易出不对。没有头绪恩啊

#17


你说的是系统保留盘?

#18


引用 17 楼 bojie5744 的回复:
你说的是系统保留盘?

不是说的系统保留盘。就是有些笔记本比如说买回来只有一个C盘所有空间都在C盘里。然后想分出来其他盘就要在C盘上面点右键压缩一写空间出来。然后分配给D盘E盘这样。

#19


引用 18 楼 joysen21 的回复:
Quote: 引用 17 楼 bojie5744 的回复:

你说的是系统保留盘?

不是说的系统保留盘。就是有些笔记本比如说买回来只有一个C盘所有空间都在C盘里。然后想分出来其他盘就要在C盘上面点右键压缩一写空间出来。然后分配给D盘E盘这样。
如果是按顺序压缩我估计也不会出问题。比如C盘压缩出来的空白空间,直接分给D盘E盘。但是如果C盘的空间先压缩出来一 D盘.过段时间.感觉D盘不够。又从C盘压缩个E盘出来.这样就应该分区号对不上了

#20


[

引用 18 楼 joysen21 的回复:
Quote: 引用 17 楼 bojie5744 的回复:

你说的是系统保留盘?

不是说的系统保留盘。就是有些笔记本比如说买回来只有一个C盘所有空间都在C盘里。然后想分出来其他盘就要在C盘上面点右键压缩一写空间出来。然后分配给D盘E盘这样。

恩恩,的确,这个情况上面的代码不能正常获取。

#21


引用 20 楼 bojie5744 的回复:
[

Quote: 引用 18 楼 joysen21 的回复:

Quote: 引用 17 楼 bojie5744 的回复:

你说的是系统保留盘?

不是说的系统保留盘。就是有些笔记本比如说买回来只有一个C盘所有空间都在C盘里。然后想分出来其他盘就要在C盘上面点右键压缩一写空间出来。然后分配给D盘E盘这样。

恩恩,的确,这个情况上面的代码不能正常获取。

有没有其他途径能获取真确的分区号呢

#22


建议查看其它脚本语言是否有便捷的方法。

#23


引用 22 楼 bojie5744 的回复:
建议查看其它脚本语言是否有便捷的方法。

好的。还是很感谢你

#24


有没有大神能帮帮我。谢谢了!!

#25


求获取盘符对应的硬盘好和分区号的代码!

#1


mSdn上找

#2


没有找到。不然也不来求助了

#3


#4


引用 3 楼 bojie5744 的回复:
http://blog.csdn.net/bojie5744/article/details/38039827 获取盘符

不是简单的获取盘符。还需要获取到盘符对应的磁盘号。和分区号

#5


::GetLogicalDriveStrings

#6


引用 5 楼 tiger9991 的回复:
::GetLogicalDriveStrings

GetLogicalDriveStrings得到的是盘符吧.怎么去获取每个盘符对应的磁盘号和分区号呢

#7



//获取盘符
#include "stdafx.h"
#include <winsock2.h>
#pragma comment (lib,"ws2_32.lib")
#include <windows.h>
#include <stdlib.h>
#include <Winioctl.h>
#pragma pack(1)
#pragma  warning (disable:4786)
#include <map>
#include <string>
#include <iostream>
using namespace std;//头文件加载有多,自行删除一些无关的。
int _tmain(int argc, _TCHAR* argv[])
{
HANDLE hDrv = CreateFile(L"\\\\.\\C:",      //这里改变刚才获得的判断,这里确定为C盘,L"\\\\.\\D:"为获取D盘的盘符
GENERIC_READ,               
FILE_SHARE_READ |
FILE_SHARE_WRITE, 
NULL,           
OPEN_EXISTING,    
0,               
NULL);
if(!hDrv)
{
cout << "Error Can not open the Driver " << GetLastError();
return 0;
}
PARTITION_INFORMATION pinfo;
DWORD lpBytesReturned;
BOOL bSuccess = DeviceIoControl(
(HANDLE) hDrv,               
IOCTL_DISK_GET_PARTITION_INFO, 
NULL,                            
0,                              
(LPVOID) &pinfo,            
(DWORD) sizeof(pinfo),        
(LPDWORD) &lpBytesReturned,       
(LPOVERLAPPED) NULL     
);
CloseHandle(hDrv);
if(!bSuccess)
{
cout << "ERROR " << GetLastError();
return 0;
}
cout << pinfo.PartitionNumber;
while(1);
return 1;
}


#8


上面第一行注释打错,是获取分区号

#9


参考这个改一下吧:
#include <iostream>
#include <windows.h>
using namespace std; 

typedef struct _VOLUME_INFO
{

TCHAR chFlag;

DWORD dwDiskNumber;

}VOLUME_INFO, *PVOLUME_INFO;


//chFlag为对应磁盘的盘符
BOOL GetVolumeInfo(IN TCHAR chFlag, OUT PVOLUME_INFO pVolumeInfo)
{

TCHAR szVol[] = { '\\', '\\', '.', '\\', chFlag, ':', 0};

HANDLE hDrv = CreateFile(szVol, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);

if (INVALID_HANDLE_VALUE == hDrv)

{

return FALSE;

}

VOLUME_DISK_EXTENTS vde;

DWORD dwBytes;

BOOL bOK = DeviceIoControl(hDrv, IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS, NULL, 0,&vde, sizeof(vde), &dwBytes, NULL);

if (!bOK)

{

CloseHandle(hDrv);

return FALSE;

}

pVolumeInfo->chFlag = chFlag; //分区盘符

pVolumeInfo->dwDiskNumber = vde.Extents->DiskNumber; //分区所在硬盘编号,基于0,第一个硬盘的编号为0,第二个硬件的编号为1,如此类推

return TRUE;

}

int main()
{

for (TCHAR chFlag = 'A'; chFlag <= 'Z'; ++chFlag)
{
VOLUME_INFO pi = {0};
GetVolumeInfo(chFlag, &pi);
}
}

#10


http://www.cnblogs.com/qq78292959/archive/2012/06/12/2546914.html
可以利用这个来获取所有的磁盘字符串

#11


GetVolume系列函数  。。MSDN上面有

#12


引用 7 楼 bojie5744 的回复:

//获取盘符
#include "stdafx.h"
#include <winsock2.h>
#pragma comment (lib,"ws2_32.lib")
#include <windows.h>
#include <stdlib.h>
#include <Winioctl.h>
#pragma pack(1)
#pragma  warning (disable:4786)
#include <map>
#include <string>
#include <iostream>
using namespace std;//头文件加载有多,自行删除一些无关的。
int _tmain(int argc, _TCHAR* argv[])
{
HANDLE hDrv = CreateFile(L"\\\\.\\C:",      //这里改变刚才获得的判断,这里确定为C盘,L"\\\\.\\D:"为获取D盘的盘符
GENERIC_READ,               
FILE_SHARE_READ |
FILE_SHARE_WRITE, 
NULL,           
OPEN_EXISTING,    
0,               
NULL);
if(!hDrv)
{
cout << "Error Can not open the Driver " << GetLastError();
return 0;
}
PARTITION_INFORMATION pinfo;
DWORD lpBytesReturned;
BOOL bSuccess = DeviceIoControl(
(HANDLE) hDrv,               
IOCTL_DISK_GET_PARTITION_INFO, 
NULL,                            
0,                              
(LPVOID) &pinfo,            
(DWORD) sizeof(pinfo),        
(LPDWORD) &lpBytesReturned,       
(LPOVERLAPPED) NULL     
);
CloseHandle(hDrv);
if(!bSuccess)
{
cout << "ERROR " << GetLastError();
return 0;
}
cout << pinfo.PartitionNumber;
while(1);
return 1;
}



这代码是可以获取到分区号。但是遇到压缩出来的盘符时检测出来的结果就不对了下面是代码检测结果(不正确) 求获取盘符对应的硬盘好和分区号的代码!
下面是正确的结果
求获取盘符对应的硬盘好和分区号的代码!

#13


引用 12 楼 joysen21 的回复:
Quote: 引用 7 楼 bojie5744 的回复:


//获取盘符
#include "stdafx.h"
#include <winsock2.h>
#pragma comment (lib,"ws2_32.lib")
#include <windows.h>
#include <stdlib.h>
#include <Winioctl.h>
#pragma pack(1)
#pragma  warning (disable:4786)
#include <map>
#include <string>
#include <iostream>
using namespace std;//头文件加载有多,自行删除一些无关的。
int _tmain(int argc, _TCHAR* argv[])
{
HANDLE hDrv = CreateFile(L"\\\\.\\C:",      //这里改变刚才获得的判断,这里确定为C盘,L"\\\\.\\D:"为获取D盘的盘符
GENERIC_READ,               
FILE_SHARE_READ |
FILE_SHARE_WRITE, 
NULL,           
OPEN_EXISTING,    
0,               
NULL);
if(!hDrv)
{
cout << "Error Can not open the Driver " << GetLastError();
return 0;
}
PARTITION_INFORMATION pinfo;
DWORD lpBytesReturned;
BOOL bSuccess = DeviceIoControl(
(HANDLE) hDrv,               
IOCTL_DISK_GET_PARTITION_INFO, 
NULL,                            
0,                              
(LPVOID) &pinfo,            
(DWORD) sizeof(pinfo),        
(LPDWORD) &lpBytesReturned,       
(LPOVERLAPPED) NULL     
);
CloseHandle(hDrv);
if(!bSuccess)
{
cout << "ERROR " << GetLastError();
return 0;
}
cout << pinfo.PartitionNumber;
while(1);
return 1;
}



这代码是可以获取到分区号。但是遇到压缩出来的盘符时检测出来的结果就不对了下面是代码检测结果(不正确) 求获取盘符对应的硬盘好和分区号的代码!
下面是正确的结果
求获取盘符对应的硬盘好和分区号的代码!

自己根据实际情况优化下。

#14


收藏学习 求获取盘符对应的硬盘好和分区号的代码!

#15


引用 9 楼 fishion 的回复:
参考这个改一下吧:
#include <iostream>
#include <windows.h>
using namespace std; 

typedef struct _VOLUME_INFO
{

TCHAR chFlag;

DWORD dwDiskNumber;

}VOLUME_INFO, *PVOLUME_INFO;


//chFlag为对应磁盘的盘符
BOOL GetVolumeInfo(IN TCHAR chFlag, OUT PVOLUME_INFO pVolumeInfo)
{

TCHAR szVol[] = { '\\', '\\', '.', '\\', chFlag, ':', 0};

HANDLE hDrv = CreateFile(szVol, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);

if (INVALID_HANDLE_VALUE == hDrv)

{

return FALSE;

}

VOLUME_DISK_EXTENTS vde;

DWORD dwBytes;

BOOL bOK = DeviceIoControl(hDrv, IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS, NULL, 0,&vde, sizeof(vde), &dwBytes, NULL);

if (!bOK)

{

CloseHandle(hDrv);

return FALSE;

}

pVolumeInfo->chFlag = chFlag; //分区盘符

pVolumeInfo->dwDiskNumber = vde.Extents->DiskNumber; //分区所在硬盘编号,基于0,第一个硬盘的编号为0,第二个硬件的编号为1,如此类推

return TRUE;

}

int main()
{

for (TCHAR chFlag = 'A'; chFlag <= 'Z'; ++chFlag)
{
VOLUME_INFO pi = {0};
GetVolumeInfo(chFlag, &pi);
}
}

这段代码是获取到分区所在的硬盘编号。我需要的是分区所在的硬盘编号和分区编号.

#16


引用 13 楼 bojie5744 的回复:
Quote: 引用 12 楼 joysen21 的回复:

Quote: 引用 7 楼 bojie5744 的回复:


//获取盘符
#include "stdafx.h"
#include <winsock2.h>
#pragma comment (lib,"ws2_32.lib")
#include <windows.h>
#include <stdlib.h>
#include <Winioctl.h>
#pragma pack(1)
#pragma  warning (disable:4786)
#include <map>
#include <string>
#include <iostream>
using namespace std;//头文件加载有多,自行删除一些无关的。
int _tmain(int argc, _TCHAR* argv[])
{
HANDLE hDrv = CreateFile(L"\\\\.\\C:",      //这里改变刚才获得的判断,这里确定为C盘,L"\\\\.\\D:"为获取D盘的盘符
GENERIC_READ,               
FILE_SHARE_READ |
FILE_SHARE_WRITE, 
NULL,           
OPEN_EXISTING,    
0,               
NULL);
if(!hDrv)
{
cout << "Error Can not open the Driver " << GetLastError();
return 0;
}
PARTITION_INFORMATION pinfo;
DWORD lpBytesReturned;
BOOL bSuccess = DeviceIoControl(
(HANDLE) hDrv,               
IOCTL_DISK_GET_PARTITION_INFO, 
NULL,                            
0,                              
(LPVOID) &pinfo,            
(DWORD) sizeof(pinfo),        
(LPDWORD) &lpBytesReturned,       
(LPOVERLAPPED) NULL     
);
CloseHandle(hDrv);
if(!bSuccess)
{
cout << "ERROR " << GetLastError();
return 0;
}
cout << pinfo.PartitionNumber;
while(1);
return 1;
}



这代码是可以获取到分区号。但是遇到压缩出来的盘符时检测出来的结果就不对了下面是代码检测结果(不正确) 求获取盘符对应的硬盘好和分区号的代码!
下面是正确的结果
求获取盘符对应的硬盘好和分区号的代码!

自己根据实际情况优化下。

大神。不知道从什么地方入手。正常分区的基本都没问题。如果分区是从其他盘里压缩出来的就容易出不对。没有头绪恩啊

#17


你说的是系统保留盘?

#18


引用 17 楼 bojie5744 的回复:
你说的是系统保留盘?

不是说的系统保留盘。就是有些笔记本比如说买回来只有一个C盘所有空间都在C盘里。然后想分出来其他盘就要在C盘上面点右键压缩一写空间出来。然后分配给D盘E盘这样。

#19


引用 18 楼 joysen21 的回复:
Quote: 引用 17 楼 bojie5744 的回复:

你说的是系统保留盘?

不是说的系统保留盘。就是有些笔记本比如说买回来只有一个C盘所有空间都在C盘里。然后想分出来其他盘就要在C盘上面点右键压缩一写空间出来。然后分配给D盘E盘这样。
如果是按顺序压缩我估计也不会出问题。比如C盘压缩出来的空白空间,直接分给D盘E盘。但是如果C盘的空间先压缩出来一 D盘.过段时间.感觉D盘不够。又从C盘压缩个E盘出来.这样就应该分区号对不上了

#20


[

引用 18 楼 joysen21 的回复:
Quote: 引用 17 楼 bojie5744 的回复:

你说的是系统保留盘?

不是说的系统保留盘。就是有些笔记本比如说买回来只有一个C盘所有空间都在C盘里。然后想分出来其他盘就要在C盘上面点右键压缩一写空间出来。然后分配给D盘E盘这样。

恩恩,的确,这个情况上面的代码不能正常获取。

#21


引用 20 楼 bojie5744 的回复:
[

Quote: 引用 18 楼 joysen21 的回复:

Quote: 引用 17 楼 bojie5744 的回复:

你说的是系统保留盘?

不是说的系统保留盘。就是有些笔记本比如说买回来只有一个C盘所有空间都在C盘里。然后想分出来其他盘就要在C盘上面点右键压缩一写空间出来。然后分配给D盘E盘这样。

恩恩,的确,这个情况上面的代码不能正常获取。

有没有其他途径能获取真确的分区号呢

#22


建议查看其它脚本语言是否有便捷的方法。

#23


引用 22 楼 bojie5744 的回复:
建议查看其它脚本语言是否有便捷的方法。

好的。还是很感谢你

#24


有没有大神能帮帮我。谢谢了!!

#25


求获取盘符对应的硬盘好和分区号的代码!