簡體   English   中英

Directory.GetCurrentDirectory()根據命令行參數返回不同的結果

[英]Directory.GetCurrentDirectory() returns different results based on command line arguments

我希望有人可以解釋為什么Directory.GetCurrentDirectory()根據我將命令行參數傳遞給應用程序的方式返回不同的結果(使用args運行vs在app.exe上拖動文件夾)

要直接進入它,請考慮以下代碼:

 public class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("The current directory is {0}", Directory.GetCurrentDirectory());

        if(args != null && args.Any())
            Console.WriteLine("Command line arguments are {0}", String.Join(", ", args));

        Console.ReadLine();
    }
}


如果使用命令提示符構建並運行它,如下所示,則輸出就是您所期望的。 它將輸出應用程序所在的當前目錄。

C:\Projects\ArgumentTest\ApplicationA\bin\Debug\ApplicationA.exe C:\mydirectory
The current directory is C:\Projects\ArgumentTest\ApplicationA\bin\Debug\
Command line arguments are C:\mydirectory


如果通過在應用程序上拖動文件或文件夾來構建和運行此程序,則會得到不同的結果。 而不是返回預期的結果而不是Directory.GetCurrentDirectory()返回您在應用程序上拖動的第一個文件的路徑。


我現在有一個解決這個問題的方法,但我很想知道為什么會這樣。

其他信息:

  • .NET 4.5
  • Windows 2012R2(虛擬機)
  • 機器的完全管理員權限

希望有人可以提供一些見解。

我認為這里的問題是你的期望。 特別是這一點:

它將輸出應用程序所在的當前目錄。

不是我對GetCurrentDirectory()期望。 當前目錄是調用上下文的一個功能,而不是應用程序。 如果我通過完整或相對路徑(而不僅僅是foo.exe )運行可執行文件,我希望GetCurrentDirectory()返回我所在的目錄 - 而不是應用程序所在的目錄。在拖動文件的情況下它:坦率地說, GetCurrentDirectory()在很大程度上是未定義的,但第一個文件的目錄並不合理。

將文件拖放到可執行文件時,它將從您刪除的文件的位置運行它。 例如,如果將C:\\ Path-To-File \\ File.txt放到C:\\ Program \\ ApplicationA.exe上,就像從命令提示符處完成以下操作一樣:

cd C:\Path-To-File
C:\Program\ApplicationA.exe C:\Path-To-File\File.txt

當您手動運行應用程序時(在上面的示例中),您可以控制它正在運行的目錄,這就是它與您期望的匹配的原因。

我打賭問題是'當前目錄'屬性是不同的。

當前目錄為您提供當前工作目錄,而不是可執行文件的位置。

拖放時,當前目錄設置為源(拖動源)而不是放置目標

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM