获取当前文件夹path
我想创build一个转换文件的程序。 我希望用户能够将可执行文件放置在任何目录中,当执行该程序(双击.exe)时,我希望程序处理exe文件所在的当前文件夹中的所有文件 。 程序如何确定当前正在执行的path?
我试过System.Windows.Forms.Application.StartupPath
但似乎是错误的方式。
有任何想法吗?
您不应该使用Directory.GetCurrentDirectory()
,因为当前目录可能与执行文件夹不同,尤其是当您通过快捷方式执行程序时。
最好使用Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
为了你的目的。 这将返回当前正在执行的程序集所在的path名。
虽然我build议的方法可以区分正在执行的组件,入口组件或任何其他装载的组件,正如SonerGönül在答复中所说的,
System.IO.Path.GetDirectoryName(Application.ExecutablePath);
也可能就足够了。 这将等于
System.IO.Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
System.AppDomain.CurrentDomain.BaseDirectory
这会给你的应用程序的运行目录。 这甚至适用于Web应用程序。 之后,您可以访问您的文件。
string appPath = System.IO.Path.GetDirectoryName(Application.ExecutablePath);
从Path.GetDirectoryName
返回指定pathstring的目录信息。
从Application.ExecutablePath
获取启动应用程序的可执行文件的path,包括可执行文件的名称。
尝试这个:
System.Environment.CurrentDirectory
用这个,
var currentDirectory = System.IO.Directory.GetCurrentDirectory();
你也可以使用这个。
var currentDirectory = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
我用下面的代码创build了一个简单的控制台程序:
Console.WriteLine(System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)); Console.WriteLine(System.AppDomain.CurrentDomain.BaseDirectory); Console.WriteLine(System.Environment.CurrentDirectory); Console.WriteLine(System.IO.Directory.GetCurrentDirectory()); Console.WriteLine(Environment.CurrentDirectory);
我将生成的可执行文件复制到C:\temp2
。 然后,我在C:\temp3
放置了一个可执行文件的快捷方式,并运行它(一次从exe本身,一次从快捷方式)。 它同时给出了以下输出:
C:\temp2 C:\temp2\ C:\temp2 C:\temp2 C:\temp2
虽然我确定必须有一些自杀原因来解释为什么有五种不同的方法可以完成同样的事情,我当然不知道它是什么。 不过,在大多数情况下,你可以自由select你喜欢的任何一个。
更新:我修改了快捷方式属性,将“开始:”字段更改为C:\temp3
。 这导致了以下输出:
C:\temp2 C:\temp2\ C:\temp3 C:\temp3 C:\temp3
…至lesscertificate了不同方法之间的区别。
1。
Directory.GetCurrentDirectory();
2。
Thread.GetDomain().BaseDirectory
3。
Environment.CurrentDirectory