假设我在C#代码ae /a/b/c/xyz.exe中有一个二进制文件,它需要/a/b/c/hello.txt在同一目录中。如何在完整路径中获取/a/b/c/hello.txt?
在python中,我可以使用os.path.abspath(sys.argv[0])
获取正在运行的程序的路径,并且我可以使用dirname()获取目录信息,并且我可以使用join()来获取新的完整路径。
import sys
from os.path import *
newName = join(dirname(abspath(sys.arg[0]), "hello.txt")
C#如何做同样的事情?
答案 0 :(得分:5)
您可以使用Environment.CurrentDirectory,Environment.GetCommandLineArgs和System.IO.Path中的类来执行相同的操作。您的代码将翻译为:
// using System.IO;
string newPath = Path.Combine(
Path.GetDirectoryName(
Path.GetFullPath(Environment.GetCommandLineArgs[0])
), "hello.txt");
但是,如果在调用此目录之前当前目录已更改,则此操作将失败。 (它也会在python中......)使用以下内容可能更好:
// using System.IO;
// using System.Reflection;
string newPath = Path.Combine(
Path.GetDirectoryName(Assembly.GetEntryAssembly().Location)
, "hello.txt");
答案 1 :(得分:1)
使用Application.StartupPath
请参阅:http://msdn.microsoft.com/en-us/library/system.windows.forms.application.startuppath(v=vs.71).aspx
如果自程序启动以来已更改当前目录,则该目录将失败。