原创 SetCurrentDirectory (szBuffer + 1)

2012-11-29 20:44 1206 13 14 分类: 工程师职场

终于把《windows 程序设计》看了三百多页(三分之一),在看《windows 程序设计》第九章时, HEAD程序代码中有个疑问,具体问题如下:

 

代码为:

 

  szBuffer [lstrlen (szBuffer) - 1] = '/0' ;

  // If setting the directory doesn't work, maybe it's
  // a drive change, so try that.

  if (!SetCurrentDirectory (szBuffer + 1))
  {
       szBuffer [3] = ':' ;
       szBuffer [4] = '/0' ;
       SetCurrentDirectory (szBuffer + 2) ;
  }

 

 ....(省略代码)

 

这个szBuffer+1 是什么意思? szBuffer[3], szBuffer[4]为什么这么设置?

 

解答:

这是LB_DIR影响的结果造成的。

1.如果是文件,列表中的一项就显示为文件名;

2.如果不是文件,就可能为文件夹或者驱动盘。

本文探讨的是属于第二种情况,即为不是文件。szBuffer列表一项的字符串,它有3种可能:

  [..]                   //上一层目录

  [foldername]   //文件夹名称,如[world],一个名为world的文件夹

  [-driver-]         //驱动盘名称,如[-c-],c盘

 

举个例子:

如果你选中的是一个叫world的文件夹,则szBuffer内容为[world],通过  szBuffer [lstrlen (szBuffer) - 1] = '/0' ; 得到[world/0

if (!SetCurrentDirectory (szBuffer + 1)) 是判断当前目录是否为文件夹。从szBuffer+1开始后面的字符串为路径,即为world/0。

把world设置为当前文件夹,设置成功,判断不成立。跳到省略号的代码。

 

另一个例子:

如果你选中的是一个c盘,则szBuffer内容为[-c-],通过  szBuffer [lstrlen (szBuffer) - 1] = '/0' ; 得到[-c-/0

if (!SetCurrentDirectory (szBuffer + 1)) 是判断当前目录是否为文件夹。从szBuffer+1开始后面的字符串为路径,即为-c-/0

它不是文件夹,所以设置不成功,判断成立,进入括号部分,

通过szBuffer [3] = ':' ;
       szBuffer [4] = '/0' ;

把szBuffer从[-c-/0 变为 [-c:/0

从szBuffer+2开始后面的字符串为路径,所以用 SetCurrentDirectory (szBuffer + 2) ;把c:/0设置为当前路径。

PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

用户377235 2012-12-7 15:40

piaoguo...
相关推荐阅读
mcuandme 2020-03-14 23:15
18位、线性、低噪声、精密双极性±10 V直流电压源
www.analog.com/zh/CN0200...
mcuandme 2020-03-14 21:51
C语言printf("")左对齐和右对齐 (转)
https://blog.csdn.net/abcdu1/article/details/74926375  原文地址1.左对齐方式1printf("%d\n",101010);默认打印格式...
mcuandme 2020-03-14 21:45
放大器电路设计中的常见问题经验总结
源地址:https://www.cnblogs.com/huanzxj/p/5667633.html与分立器件相比,现代集成运算放大器(op amp)和仪表放大器(in-amp)为设计工程师带来了许多...
mcuandme 2015-07-13 15:12
简单的固态继电器具有过零开关功能
本设计实例是一个固态继电器(SSR),它能利用双向晶闸管切换大电流的交流负载(图1)。市场上有大量简单的固态继电器电路,但这个电路可能是最简单的,它只在交流线路电压接近零时才导通和关断。 晶体管Q2...
mcuandme 2014-07-30 08:44
LIB和DLL的区别与使用
共有两种库: 一种是LIB包含了函数所在的DLL文件和文件中函数位置的信息(入口),代码由运行时加载在进程空间中的DLL提供,称为动态链接库dynamic link library。 ...
mcuandme 2013-12-19 22:16
Stellaris LM3S MCUs
今天买了个开发板 EKK LM3S3748 然后上网查资料是 Stellaris LM3S MCUs 系列的芯片 是CORTX M3 内核 但是TI官方网站已经推荐上级到  Upgrade...
EE直播间
更多
我要评论
1
13
关闭 站长推荐上一条 /1 下一条