Environment.CurrentDirectory 是如何工作的?
How do Environment.CurrentDirectory work?
static void Main(string[] args)
{
Console.WriteLine(Environment.CurrentDirectory);
Console.ReadLine();
}
代码很简单,但是不小心提出了一个问题。
如果我按下“运行”按钮,我将得到如下输出:
C:\Users\Admin\source\repos\FeaturesTest\ConsoleApp1\bin\Debug
但是如果我用 cmd.exe 或 Powershell 调用这个程序,输出将是控制台的当前目录:
Example 1:
PS C:\Users\Admin> C:\Users\Admin\source\repos\FeaturesTest\ConsoleApp1\bin\Debug\ConsoleApp1.exe
C:\Users\Admin
PS C:\Users\Admin> _
Example 2:
PS C:\Users\Admin\Desktop> C:\Users\Admin\source\repos\FeaturesTest\ConsoleApp1\bin\Debug\ConsoleApp1.exe
C:\Users\Admin\Desktop
PS C:\Users\Admin\Desktop> _
如果我用另一个程序调用这个程序,输出将是后者(调用前者)的工作目录:
The code of ConsoleApp2 (the caller):
static void Main(string[] args)
{
Process.Start(@"C:\Users\Admin\source\repos\FeaturesTest\ConsoleApp1\bin\Debug\ConsoleApp1.exe");
}
The output of ConsoleApp1 (the called program, because ConsoleApp2 don't have output):
C:\Users\Admin\source\repos\FeaturesTest\ConsoleApp2\bin\Debug
所以,我重复这个问题:Environment.CurrentDirectory 是如何工作的?我就是想知道。
谢谢。
By definition, if this process starts in the root directory of a local or network drive, the value of this property is the drive name followed by a trailing slash (for example, "C:"). If this process starts in a subdirectory, the value of this property is the drive and subdirectory path, without a trailing slash (for example, "C:\mySubDirectory").
https://docs.microsoft.com/en-us/dotnet/api/system.environment.currentdirectory?view=net-5.0
Enviroment.CurrentDirectory 将为您提供调用应用程序的目录。如果您从 PowerShell 调用可执行文件,在 C:\ 中,应用程序将被包装在此 shell 中,无需实例化一个新的 shell... 如果您双击 .exe 文件将提示一个新的 shell 到 运行 应用程序,所以目录就是 .exe 所在的目录。
另请检查此问题以检查获取 运行ning 应用程序目录的其他方法。
Best way to get application folder path
static void Main(string[] args)
{
Console.WriteLine(Environment.CurrentDirectory);
Console.ReadLine();
}
代码很简单,但是不小心提出了一个问题。 如果我按下“运行”按钮,我将得到如下输出:
C:\Users\Admin\source\repos\FeaturesTest\ConsoleApp1\bin\Debug
但是如果我用 cmd.exe 或 Powershell 调用这个程序,输出将是控制台的当前目录:
Example 1:
PS C:\Users\Admin> C:\Users\Admin\source\repos\FeaturesTest\ConsoleApp1\bin\Debug\ConsoleApp1.exe
C:\Users\Admin
PS C:\Users\Admin> _
Example 2:
PS C:\Users\Admin\Desktop> C:\Users\Admin\source\repos\FeaturesTest\ConsoleApp1\bin\Debug\ConsoleApp1.exe
C:\Users\Admin\Desktop
PS C:\Users\Admin\Desktop> _
如果我用另一个程序调用这个程序,输出将是后者(调用前者)的工作目录:
The code of ConsoleApp2 (the caller):
static void Main(string[] args)
{
Process.Start(@"C:\Users\Admin\source\repos\FeaturesTest\ConsoleApp1\bin\Debug\ConsoleApp1.exe");
}
The output of ConsoleApp1 (the called program, because ConsoleApp2 don't have output):
C:\Users\Admin\source\repos\FeaturesTest\ConsoleApp2\bin\Debug
所以,我重复这个问题:Environment.CurrentDirectory 是如何工作的?我就是想知道。
谢谢。
By definition, if this process starts in the root directory of a local or network drive, the value of this property is the drive name followed by a trailing slash (for example, "C:"). If this process starts in a subdirectory, the value of this property is the drive and subdirectory path, without a trailing slash (for example, "C:\mySubDirectory").
https://docs.microsoft.com/en-us/dotnet/api/system.environment.currentdirectory?view=net-5.0
Enviroment.CurrentDirectory 将为您提供调用应用程序的目录。如果您从 PowerShell 调用可执行文件,在 C:\ 中,应用程序将被包装在此 shell 中,无需实例化一个新的 shell... 如果您双击 .exe 文件将提示一个新的 shell 到 运行 应用程序,所以目录就是 .exe 所在的目录。
另请检查此问题以检查获取 运行ning 应用程序目录的其他方法。
Best way to get application folder path