7

可能重复:
如何使用 C# 找出我的控制台应用程序在哪个目录中运行?

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

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

Environment.CurrentDirectory并且System.Reflection.Assembly.GetExecutingAssembly().Location会返回c:\tools,但我希望能够解析somefile.txt与.subdir\oterfile.txtC:\Users\Me\Documents\

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

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

4

2 回答 2

15

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
并将可执行文件放入Open a command prompt 并使用 From that directory I runD:\temp
设置当前工作目录cd D:\temp2
..\temp\mytestapp.exe

输出是

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

出于好奇:

这是Net 1.1中Environment.CurrentDirectory的文档

获取和设置当前目录的全限定路径;也就是这个进程开始的目录。

这是 NET 4.0 中的文档

获取或设置当前工作目录的标准路径。

于 2012-11-27T15:45:00.290 回答
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

于 2012-11-27T15:19:57.970 回答