工作目录

目录

返回目录

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"));

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

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

    Console.WriteLine();

}

输出:

e:usersmgendocumentsvisual studio 2010ProjectsTTCTTCinRelease

e:a

e:usersmgendocumentsvisual studio 2010ProjectsTTCTTCinReleasea

D:archives

D:a

D:archivesa

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

返回目录

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);

原文地址:https://www.cnblogs.com/qianyz/p/3373995.html