进程可以有两个当前目录?
我一直以为,进程的当前目录就是 EXE 所在的路径,但是看了下面的内容,我找不到北了。
下面的内容来自《windows核心编程》第五版,81页,4.1.8节
系统跟踪记录着进程的当前驱动器和目录,但它没有记录每个驱动器的当前目录。不过利用操作系统提供的支持,可以处理多个驱动器的当前目录。这个支持是通过进程的环境字符串来提供的。例如,一个进程可以有如下所示的两个环境变量:
=C:=C:\Utility\Bin
=D:=D:\Program Files
上述变量指出进程在 C 驱动器的当前目录为 \Utility\Bin,在 D 驱动器的当前目录为 \Program Files。
1、上面的第二句说“但它没有记录每个驱动器的当前目录”。驱动器还有当前目录?驱动器不就是 C:\ 、 D:\ 这种吗?它们已经是任何路径的起始,怎么还会有它们的路径呢?!!!
2、一个进程有两个当前目录是怎么回事?
------解决方案--------------------------------------------------------
>1、上面的第二句说“但它没有记录每个驱动器的当前目录”。驱动器还有当前目录?驱动器不就是 C:\ 、 D:\ 这种吗?它们已经是任何路径的起始,怎么还会有它们的路径呢?!!!
驱动器有当前目录,你可以用cmd很简单的测一下,run cmd,显示的是当前系统盘的当前目录,我这儿Win 7上是C:\Users\username\, 你切换到其他驱动器,比如D:, 然后切换回C:,你会看到还是C:\Users\username\,就是说驱动器C的当前目录还是C:\Users\username\
>2、一个进程有两个当前目录是怎么回事?
进程的当前目录与驱动器的当前目录不是一个概念,进程的当前目录是指进程所在的驱动器的当前目录
>我一直以为,进程的当前目录就是 EXE 所在的路径
当然不一定,如果你从命令行来运行EXE的话。
------解决方案--------------------------------------------------------
比如你的程序在C:\Windows\notepad.exe,你打开cmd,当前目录是C:\Users\username\,你运行C:\Windows\notepad.exe, 那么这个进程的当前目录是C:\Users\username\, 不是C:\Windows\notepad.exe, 你可以在你的程序里调用GetCurrentDirectory来测试。
------解决方案--------------------------------------------------------
获取进程的当前目录:GetCurrentDirectory();
GetCurrentDirectory Function
Retrieves the current directory for the current process.
------解决方案--------------------------------------------------------
你运行cmd
会有C:\Users\Consumer>
这个就是当前目录,显然不是cmd.exe所在的目录
然后cd c:\windows就到了c:\windows
接着cd d:\downloads,但是当前目录没变,因为你还在c盘
下面执行d:,就到了d:\DOWNLOADS>
我一直以为,进程的当前目录就是 EXE 所在的路径,但是看了下面的内容,我找不到北了。
下面的内容来自《windows核心编程》第五版,81页,4.1.8节
系统跟踪记录着进程的当前驱动器和目录,但它没有记录每个驱动器的当前目录。不过利用操作系统提供的支持,可以处理多个驱动器的当前目录。这个支持是通过进程的环境字符串来提供的。例如,一个进程可以有如下所示的两个环境变量:
=C:=C:\Utility\Bin
=D:=D:\Program Files
上述变量指出进程在 C 驱动器的当前目录为 \Utility\Bin,在 D 驱动器的当前目录为 \Program Files。
1、上面的第二句说“但它没有记录每个驱动器的当前目录”。驱动器还有当前目录?驱动器不就是 C:\ 、 D:\ 这种吗?它们已经是任何路径的起始,怎么还会有它们的路径呢?!!!
2、一个进程有两个当前目录是怎么回事?
------解决方案--------------------------------------------------------
>1、上面的第二句说“但它没有记录每个驱动器的当前目录”。驱动器还有当前目录?驱动器不就是 C:\ 、 D:\ 这种吗?它们已经是任何路径的起始,怎么还会有它们的路径呢?!!!
驱动器有当前目录,你可以用cmd很简单的测一下,run cmd,显示的是当前系统盘的当前目录,我这儿Win 7上是C:\Users\username\, 你切换到其他驱动器,比如D:, 然后切换回C:,你会看到还是C:\Users\username\,就是说驱动器C的当前目录还是C:\Users\username\
>2、一个进程有两个当前目录是怎么回事?
进程的当前目录与驱动器的当前目录不是一个概念,进程的当前目录是指进程所在的驱动器的当前目录
>我一直以为,进程的当前目录就是 EXE 所在的路径
当然不一定,如果你从命令行来运行EXE的话。
------解决方案--------------------------------------------------------
比如你的程序在C:\Windows\notepad.exe,你打开cmd,当前目录是C:\Users\username\,你运行C:\Windows\notepad.exe, 那么这个进程的当前目录是C:\Users\username\, 不是C:\Windows\notepad.exe, 你可以在你的程序里调用GetCurrentDirectory来测试。
------解决方案--------------------------------------------------------
获取进程的当前目录:GetCurrentDirectory();
GetCurrentDirectory Function
Retrieves the current directory for the current process.
------解决方案--------------------------------------------------------
你运行cmd
会有C:\Users\Consumer>
这个就是当前目录,显然不是cmd.exe所在的目录
然后cd c:\windows就到了c:\windows
接着cd d:\downloads,但是当前目录没变,因为你还在c盘
下面执行d:,就到了d:\DOWNLOADS>