《windows 程序设计》第九章 一个迷惑解答

来源:互联网 发布:递归算法自然数排列 编辑:程序博客网 时间:2024/05/29 17:25

终于把《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设置为当前路径。

 

解释的过于详细,累死我了。

继续看windows程序设计,好书好书啊。

原创粉丝点击