控制台应用程序中的命令行当前工作目录

时间:2012-11-27 15:09:33

标签: c# windows console

  

可能重复:
  How do I find out what directory my console app is running in with C#?

如何获取运行程序的控制台的当前工作目录,以便我可以解析作为程序args传递的相对路径?

让我说我把我的程序放在这里:c:\tools\program.exe 但是我从各个地方调用它。假设我在这里:C:\Users\Me\Documents\我运行此命令program.exe --src=somefile.txt --dest=subdir\otherfile.txt

Environment.CurrentDirectorySystem.Reflection.Assembly.GetExecutingAssembly().Location将返回c:\tools,但我希望能够解析与{{1}相关的somefile.txtsubdir\oterfile.txt路径}。

  

======更新======

     

感谢您的帮助。似乎C:\Users\Me\Documents\按预期工作。事实证明,在我的情况下,问题是由Xenocode的Postbuild工具(现在称为Spoon Virtual Application Studio)引起的,我偶尔会将所有程序的文件(包括dll,config等)“打包”到一个可执行文件中。它非常方便,但在这种情况下,“虚拟化”功能搞砸了我的程序的Environment.CurrentDirectory变量。我设法解决了这个问题。

2 个答案:

答案 0 :(得分:14)

Environment.CurrentDirectory为您提供当前工作目录

让我举一个简单的例子:

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("Startup: " + Environment.CurrentDirectory);
        Environment.CurrentDirectory = @"D:\temp";
        Console.WriteLine("After:" + Environment.CurrentDirectory);
    }
}

现在我创建了两个名为D:\tempD:\temp2的文件夹 我把可执行文件放在D:\temp中 打开命令提示符并使用cd D:\temp2设置当前工作目录 从该目录我运行..\temp\mytestapp.exe

输出

Startup: D:\temp2
After: D:\temp

好奇心:

这是Net 1.1中Environment.CurrentDirectory的文档

  

获取并设置当前目录的完全限定路径;那   是,这个过程开始的目录。

这是NET 4.0中的文档

  

获取或设置当前工作的完全限定路径   。目录

答案 1 :(得分:1)

使用EnvironmentPath类。 http://msdn.microsoft.com/en-us/library/fyy7a5kt.aspx

var fqn = Path.Combine(Environment.CurrentDirectory, "somefile.txt")

但是要玩你需要的文件:

var fqn = Path.Combine(
     Environment.GetFolderPath(Environment.SpecialFolder.Person),
     "somefile.txt");

`fqn'是完全限定名称的TLA