博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

工作目录

Posted on 2013-10-17 13:45  qianyz  阅读(352)  评论(0编辑  收藏  举报

目录

 

 

返回目录

1. 修改当前进程的工作目录

使用System.IO.Directory.GetCurrentDirectory和SetCurrentDirectory方法可以得到或者设置当前进程的工作目录(又称当前目录,初始目录)。

Environment类的CurrentDirectory属性(可读可写)内部调用Directory的GetCurrentDirectory和SetCurrentDirectory方法,因此它们是等价的。

staticvoid Main(string[] args)

{

    test();

 

    //更改工作目录

    Directory.SetCurrentDirectory(@"D:\archives");

 

    test();

}

 

//输出目录

staticvoid test()

{

    //当前工作目录

    Console.WriteLine(Directory.GetCurrentDirectory());

    //从工作目录的根目录的相对路径

    Console.WriteLine(Path.GetFullPath(@"\a\b"));

    //从工作目录的相对路径

    Console.WriteLine(Path.GetFullPath(@"a\b"));

    Console.WriteLine();

}

 

输出:

e:\users\mgen\documents\visual studio 2010\Projects\TTC\TTC\bin\Release

e:\a\b

e:\users\mgen\documents\visual studio 2010\Projects\TTC\TTC\bin\Release\a\b

 

D:\archives

D:\a\b

D:\archives\a\b

可以看出来,更改工作目录后,相对路径的值会跟随当前的工作目录而改变。

 

 

返回目录

2. 修改其它进程的工作目录

System.Diagnostics.ProcessStartInfo类的WorkingDirectory属性可以为一个准备启动的进程指定一个工作目录(注意ProcessStartInfo的UseShellExecute必须为false,UseShellExecute为true时WorkingDirectory用来指定文件的包含目录),用一个简单的命令行DIR指令就可以做个测试:

Process.Start("cmd", "/k dir");

很简单,并没有修改默认进程的工作目录,那么会在命令行中显示当前执行文件目录的子文件夹列表。

 

接下来修改工作目录:

var psi =newProcessStartInfo("cmd", "/k dir");

//不使用ShellExecute,用CreateProcess

psi.UseShellExecute =false;

psi.WorkingDirectory =@"D:\archives";

Process.Start(psi);

 

这个DIR会显示D盘的Archives目录下的子目录信息。

 

 

返回目录

3. 怎样知道真正的执行文件路径?

既然可以修改其他程序的工作目录。那么你的程序工作目录也有可能被修改,那么Directory.GetCurrentDirectory方法的结果是不确定的。那么怎样知道自己程序真正所在的目录呢?

 

有多种方法:

Windows Forms程序都熟知的:

//Applicatuib类在System.Windows.Forms命名空间内

Path.GetDirectoryName(Application.ExecutablePath);

 

还有:

Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName);

Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);