Directory.GetCurrentDirectory()在Linux上不起作用吗?
Directory.GetCurrentDirectory()在Linux上不起作用吗?
我正在尝试创建一个应用程序,需要读取名为“scripts”的子文件夹中的脚本。以下是我遇到问题的代码:
string script = Console.ReadLine(); string path = Directory.GetCurrentDirectory(); string sciptpath = path + "/scripts/" + script;
这在Windows上运行得很好。但是在Linux上(使用Mono Runtime运行时),它会进入当前用户的主目录...而不是可执行文件的目录。这是一个bug吗?有人能提供一个解决方法吗?
问题:在Linux上,Directory.GetCurrentDirectory()方法无法正常工作的原因以及解决方法。
在Linux上,Directory.GetCurrentDirectory()方法无法正常工作的原因是当前目录并不是你认为的那个目录。当前目录是相对路径的“焦点”所在的目录。无论你的EXE文件位于何处,当前目录都可能位于其他任何地方,甚至在执行过程中可能会发生变化。
解决方法是使用以下代码:
string path = Path.GetDirectoryName(Application.ExecutablePath);
这段代码可以获取当前可执行文件所在的目录,并将其赋值给变量path。
另外,不要随意修改当前目录,除非有充分的理由。通常情况下,应将当前目录视为用户控制的资源,并在处理由用户发起的请求时使用它(例如在GUI应用程序的对话框中打开文件)。只有在用户期望这样做时才应修改当前目录。当自动加载应用程序的其他文件时,这通常对用户是不可见的,或者至少用户不应被打扰。因此,应根据应用程序的安装目录计算路径,而不要使用当前目录。
因此,可以使用以下代码来获取脚本文件的完整路径:
var path = Path.GetDirectoryName(Application.ExecutablePath); var scriptdir = Path.Combine (path, "scripts"); var script = Path.Combine (scriptdir, script);
这段代码将应用程序的安装目录与脚本文件名进行组合,从而获取脚本文件的完整路径。
在Linux上,Directory.GetCurrentDirectory()方法无法正常工作的原因是当前目录可能与预期不符。解决方法是使用Path.GetDirectoryName(Application.ExecutablePath)来获取当前可执行文件所在的目录,并根据该目录计算其他文件的路径。同时,应避免随意修改当前目录,除非有充分的理由。