GetLogicalDriveStrings函数只获取到c盘?为什么呢?

lingshaohumooner 2011-11-20 11:01:00
GetLogicalDriveStrings(dwDriveStrLen, wDrivesName);
// 这里只获取到c盘(wDrivesName的值只有“C:\”)?为什么呢?
...全文
376 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
gameslq 2011-11-20
  • 打赏
  • 举报
回复
或者用这个
TCHAR szDriveString[256],*p,*pstart;
int nLen = GetLogicalDriveStrings(sizeof(szDriveString),szDriveString);

pstart = p = szDriveString;
while ( ( p = _tcschr(p,_T('\0')) ) && p != szDriveString + nLen )
AfxMessageBox(pstart),pstart = ++p;
用户 昵称 2011-11-20
  • 打赏
  • 举报
回复

#include "stdafx.h"
#include "windows.h"
#include "tchar.h"

int main(int argc, char* argv[])
{
DWORD dwDriveStrLen;
TCHAR wDrivesName[ 0x100 ];
dwDriveStrLen = sizeof( wDrivesName );
GetLogicalDriveStrings(dwDriveStrLen, wDrivesName);
TCHAR *p = ( TCHAR * )wDrivesName;
while( *p )
{
wprintf( _T( "%s\r\n" ), p );
p += ( _tcslen( p ) + 1 );
}
return 0;
}


unicode工程要类似这样。
gameslq 2011-11-20
  • 打赏
  • 举报
回复
TCHAR* p;
p = wDrivesName;
while (*p != _T('/0'))
{
// TODO:
p = p + _tcslen(p) + 1;
}


有问题,应该是
TCHAR* p;
int nLen = GetLogicalDriveStrings(dwDriveStrLen, wDrivesName);
p = wDrivesName;
while (*p != _T('/0') && p != wDrivesName +nLen )
{
// TODO:
p = p + _tcslen(p) + 1;
}

zwfgdlc 2011-11-20
  • 打赏
  • 举报
回复
用_tcstok_s ()分割字符串
用户 昵称 2011-11-20
  • 打赏
  • 举报
回复
你是unicode工程吗?
lingshaohumooner 2011-11-20
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 jennyvenus 的回复:]
C/C++ code
// testlogicdisk.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "windows.h"

int main(int argc, char* argv[])
{
DWORD dwDriveStrLen……
[/Quote]


哥们,无论是在我的VC程序中,还是用你的代码测试,得到的结果都只有“C:\”。

这究竟是为什么呢?磁盘的保护机制?or others?
lingshaohumooner 2011-11-20
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 jennyvenus 的回复:]
C/C++ code
// testlogicdisk.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "windows.h"

int main(int argc, char* argv[])
{
DWORD dwDriveStrLen……
[/Quote]

这里的char wDrivesName[ 0x100 ];
要用TCHAR类型
lingshaohumooner 2011-11-20
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 gibsonboy 的回复:]
TCHAR buf[100];
memset(buf, 0, 100*sizeof(TCHAR));
DWORD dwLen = GetLogicalDriveStrings(sizeof(buf)/sizeof(TCHAR),buf);
dwLen 是个数 ,buf[0]、buf[1]....就是本地盘符名称
[/Quote]
应该不可以直接像你这样用,参考:

while( *p )
{
printf( "%s\r\n", p );
p += ( strlen( p ) + 1 );
}

gibsonboy 2011-11-20
  • 打赏
  • 举报
回复
TCHAR buf[100];
memset(buf, 0, 100*sizeof(TCHAR));
DWORD dwLen = GetLogicalDriveStrings(sizeof(buf)/sizeof(TCHAR),buf);
dwLen 是个数 ,buf[0]、buf[1]....就是本地盘符名称
lingshaohumooner 2011-11-20
  • 打赏
  • 举报
回复
[Quote=引用楼主 lingshaohumooner 的回复:]
C/C++ code
GetLogicalDriveStrings(dwDriveStrLen, wDrivesName);
// 这里只获取到c盘(wDrivesName的值只有“C:\”)?为什么呢?
[/Quote]


TCHAR* p;
p = wDrivesName;
while (*p != _T('/0'))
{
// TODO:
p = p + _tcslen(p) + 1;
}


哥们,这样子可否?
用户 昵称 2011-11-20
  • 打赏
  • 举报
回复
// testlogicdisk.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "windows.h"

int main(int argc, char* argv[])
{
DWORD dwDriveStrLen;
char wDrivesName[ 0x100 ];
dwDriveStrLen = sizeof( wDrivesName );
GetLogicalDriveStrings(dwDriveStrLen, wDrivesName);
char *p = ( char * )wDrivesName;
while( *p )
{
printf( "%s\r\n", p );
p += ( strlen( p ) + 1 );
}
return 0;
}


C:\
D:\
E:\
Q:\
R:\
Press any key to continue
用户 昵称 2011-11-20
  • 打赏
  • 举报
回复
要用strlen来向前查找,遇到两个0才结束。
lingshaohumooner 2011-11-20
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 jennyvenus 的回复:]
C/C++ code

#include "stdafx.h"
#include "windows.h"
#include "tchar.h"

int main(int argc, char* argv[])
{
DWORD dwDriveStrLen;
TCHAR wDrivesName[ 0x100 ];
dwDriveStrLen = sizeo……
[/Quote]


很好。向您学习了。
非常感谢您。

16,470

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧