点击一个按钮选择已经找到本地的逻辑盘符C++代码怎么写
1个回答
2012-10-15 · 知道合伙人软件行家
关注
展开全部
一般都用这两种方法获取本地磁盘盘符:
1. GetLogicalDriveStrings方法
TCHAR buf[100];
DWORD len = GetLogicalDriveStrings(sizeof(buf)/sizeof(TCHAR),buf);
从名字上就知道GetLogicalDriveStrings是获得盘符的字符形式
这个函数将所有盘符都存在buf中,形式是这样:
"C:\<NULL>D:\<NULL>E:\<NULL><NULL>"
即盘符之间用NULL隔开,最后一个盘符后面跟两个NULL
所以可以这样从buf中提取单个盘符:
for (CString strDisks,TCHAR* s=buf; *s; s+=_tcslen(s)+1)
{
LPCTSTR sDrivePath = s; //单个盘符
strDisks += sDrivePath;
strDisks += " ";
}
2. GetLogicalDrives方法
DWORD dwDrives;
char a;
CString DriveName;
dwDrives = GetLogicalDrives();
a = 'A';
while (dwDrives > 0)
{
if (dwDrives % 2 == 1)
{
DriveName.Format("%c", a);
GetTreeCtrl().InsertItem(DriveName, m_nImageClose,
m_nImageOpen, TVI_ROOT, TVI_LAST);
}
a++;
dwDrives /= 2;
}
GetLogicalDrives函数返回一个DWORD值,4个字节32bit,每个bit代表一个盘符,比如bit0代表A盘,但是因为英文字母只有26个,所以最多可以表示26个盘符,不过,一般来说是够用了~~~~
其他-------------------------------------------------------------------------
//函数描述:函数名 Fresource_driveinfo
//功能:取驱动器信息
//参数描述: driveInfo存放取得的驱动器统计信息数组,
// length为数组实际存放项的
//返回值描述:返回值1表示正常,-1表示出错
short Fresource_driveinfo( Fdrive_info driveInfo[MAX1],int& length )
{
Fdrive_info DriveInfo;
memset( &DriveInfo, 0, sizeof( Fdrive_info ) );
DWORD dwBuffer=256;
char szBuffer[256];
memset( szBuffer, 0, dwBuffer );
int nSize = GetLogicalDriveStrings( dwBuffer, szBuffer );
if( nSize == 0 )
{
return -1;
}
char szDrivers[32][5];
memset( szDrivers, 0, 160 );
char szTemp[4];
memset( szTemp, 0, 4 );
int j=0;
int nLength=0; // 有几个盘符
for( int i=0; i<nSize; i++ )
{
if( szBuffer[i] == '\0' )
{
szTemp[j]='\0';
strcpy( szDrivers[nLength], szTemp );
UINT nDriver = GetDriveType( szDrivers[nLength] );
// 得到驱动器的信息
switch( nDriver )
{
case DRIVE_REMOVABLE: // 是否是软驱
break;
case DRIVE_CDROM:
break;
case DRIVE_FIXED:
strcpy( DriveInfo.drive_type, "硬盘" );
strcat( DriveInfo.drive_type, "DRIVE_FIXED" );
//GetVolumeInformation();
//DriveInfo.Partitiontype = ;
//strcpy( DriveInfo.drive_id, szDrivers[nLength] );
//DriveInfo.drive_size = ;
//GetDiskFreeSpace( szDrivers );
break;
case DRIVE_REMOTE:
break;
case DRIVE_RAMDISK:
break;
}
nLength++;
j=0;
continue;
}
szTemp[j]=szBuffer[i];
j++;
}
length = nLength;
return 1;
}
1. GetLogicalDriveStrings方法
TCHAR buf[100];
DWORD len = GetLogicalDriveStrings(sizeof(buf)/sizeof(TCHAR),buf);
从名字上就知道GetLogicalDriveStrings是获得盘符的字符形式
这个函数将所有盘符都存在buf中,形式是这样:
"C:\<NULL>D:\<NULL>E:\<NULL><NULL>"
即盘符之间用NULL隔开,最后一个盘符后面跟两个NULL
所以可以这样从buf中提取单个盘符:
for (CString strDisks,TCHAR* s=buf; *s; s+=_tcslen(s)+1)
{
LPCTSTR sDrivePath = s; //单个盘符
strDisks += sDrivePath;
strDisks += " ";
}
2. GetLogicalDrives方法
DWORD dwDrives;
char a;
CString DriveName;
dwDrives = GetLogicalDrives();
a = 'A';
while (dwDrives > 0)
{
if (dwDrives % 2 == 1)
{
DriveName.Format("%c", a);
GetTreeCtrl().InsertItem(DriveName, m_nImageClose,
m_nImageOpen, TVI_ROOT, TVI_LAST);
}
a++;
dwDrives /= 2;
}
GetLogicalDrives函数返回一个DWORD值,4个字节32bit,每个bit代表一个盘符,比如bit0代表A盘,但是因为英文字母只有26个,所以最多可以表示26个盘符,不过,一般来说是够用了~~~~
其他-------------------------------------------------------------------------
//函数描述:函数名 Fresource_driveinfo
//功能:取驱动器信息
//参数描述: driveInfo存放取得的驱动器统计信息数组,
// length为数组实际存放项的
//返回值描述:返回值1表示正常,-1表示出错
short Fresource_driveinfo( Fdrive_info driveInfo[MAX1],int& length )
{
Fdrive_info DriveInfo;
memset( &DriveInfo, 0, sizeof( Fdrive_info ) );
DWORD dwBuffer=256;
char szBuffer[256];
memset( szBuffer, 0, dwBuffer );
int nSize = GetLogicalDriveStrings( dwBuffer, szBuffer );
if( nSize == 0 )
{
return -1;
}
char szDrivers[32][5];
memset( szDrivers, 0, 160 );
char szTemp[4];
memset( szTemp, 0, 4 );
int j=0;
int nLength=0; // 有几个盘符
for( int i=0; i<nSize; i++ )
{
if( szBuffer[i] == '\0' )
{
szTemp[j]='\0';
strcpy( szDrivers[nLength], szTemp );
UINT nDriver = GetDriveType( szDrivers[nLength] );
// 得到驱动器的信息
switch( nDriver )
{
case DRIVE_REMOVABLE: // 是否是软驱
break;
case DRIVE_CDROM:
break;
case DRIVE_FIXED:
strcpy( DriveInfo.drive_type, "硬盘" );
strcat( DriveInfo.drive_type, "DRIVE_FIXED" );
//GetVolumeInformation();
//DriveInfo.Partitiontype = ;
//strcpy( DriveInfo.drive_id, szDrivers[nLength] );
//DriveInfo.drive_size = ;
//GetDiskFreeSpace( szDrivers );
break;
case DRIVE_REMOTE:
break;
case DRIVE_RAMDISK:
break;
}
nLength++;
j=0;
continue;
}
szTemp[j]=szBuffer[i];
j++;
}
length = nLength;
return 1;
}
更多追问追答
追问
谢谢,我想问的是:对已经取出所有的逻辑磁盘(包括移动磁盘),在点击一个控件时,怎么选中一个盘符对其进行读写..
追答
直接将想操作的相应盘符 文件夹 文件 假设(F:\\Test\\1.txt ) 用读写文件方式打开进行读写回复
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询