25 个解决方案
#1
mSdn上找
#2
没有找到。不然也不来求助了
#4
不是简单的获取盘符。还需要获取到盘符对应的磁盘号。和分区号
#5
::GetLogicalDriveStrings
#6
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
这代码是可以获取到分区号。但是遇到压缩出来的盘符时检测出来的结果就不对了下面是代码检测结果(不正确)
下面是正确的结果
#13
自己根据实际情况优化下。
#14
收藏学习
#15
参考这个改一下吧:#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
//获取盘符
#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
你说的是系统保留盘?
不是说的系统保留盘。就是有些笔记本比如说买回来只有一个C盘所有空间都在C盘里。然后想分出来其他盘就要在C盘上面点右键压缩一写空间出来。然后分配给D盘E盘这样。
#19
你说的是系统保留盘?
不是说的系统保留盘。就是有些笔记本比如说买回来只有一个C盘所有空间都在C盘里。然后想分出来其他盘就要在C盘上面点右键压缩一写空间出来。然后分配给D盘E盘这样。
#20
[
恩恩,的确,这个情况上面的代码不能正常获取。
你说的是系统保留盘?
不是说的系统保留盘。就是有些笔记本比如说买回来只有一个C盘所有空间都在C盘里。然后想分出来其他盘就要在C盘上面点右键压缩一写空间出来。然后分配给D盘E盘这样。
恩恩,的确,这个情况上面的代码不能正常获取。
#21
[
你说的是系统保留盘?
不是说的系统保留盘。就是有些笔记本比如说买回来只有一个C盘所有空间都在C盘里。然后想分出来其他盘就要在C盘上面点右键压缩一写空间出来。然后分配给D盘E盘这样。
恩恩,的确,这个情况上面的代码不能正常获取。
有没有其他途径能获取真确的分区号呢
#22
建议查看其它脚本语言是否有便捷的方法。
#23
建议查看其它脚本语言是否有便捷的方法。
好的。还是很感谢你
#24
有没有大神能帮帮我。谢谢了!!
#25
#1
mSdn上找
#2
没有找到。不然也不来求助了
#3
#4
http://blog.csdn.net/bojie5744/article/details/38039827 获取盘符
不是简单的获取盘符。还需要获取到盘符对应的磁盘号。和分区号
#5
::GetLogicalDriveStrings
#6
::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
//获取盘符
#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
//获取盘符
#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
参考这个改一下吧:#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
//获取盘符
#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
你说的是系统保留盘?
不是说的系统保留盘。就是有些笔记本比如说买回来只有一个C盘所有空间都在C盘里。然后想分出来其他盘就要在C盘上面点右键压缩一写空间出来。然后分配给D盘E盘这样。
#19
你说的是系统保留盘?
不是说的系统保留盘。就是有些笔记本比如说买回来只有一个C盘所有空间都在C盘里。然后想分出来其他盘就要在C盘上面点右键压缩一写空间出来。然后分配给D盘E盘这样。
#20
[
恩恩,的确,这个情况上面的代码不能正常获取。
你说的是系统保留盘?
不是说的系统保留盘。就是有些笔记本比如说买回来只有一个C盘所有空间都在C盘里。然后想分出来其他盘就要在C盘上面点右键压缩一写空间出来。然后分配给D盘E盘这样。
恩恩,的确,这个情况上面的代码不能正常获取。
#21
[
你说的是系统保留盘?
不是说的系统保留盘。就是有些笔记本比如说买回来只有一个C盘所有空间都在C盘里。然后想分出来其他盘就要在C盘上面点右键压缩一写空间出来。然后分配给D盘E盘这样。
恩恩,的确,这个情况上面的代码不能正常获取。
有没有其他途径能获取真确的分区号呢
#22
建议查看其它脚本语言是否有便捷的方法。
#23
建议查看其它脚本语言是否有便捷的方法。
好的。还是很感谢你
#24
有没有大神能帮帮我。谢谢了!!