我在两台不同的机器上使用别人的代码(许可)。在一台机器上,Application.ExecutablePath返回程序员必须预期的结果,而另一台机器则没有。两者都是Windows 7机器。
在我的机器上,Application.ExecutablePath返回类似于:
的内容"C:\\Dir1\\Dir2\\Dir3/bin/Debug/APP.EXE"
在另一台机器上,它返回
"C:\\Dir1\\Dir2\\Dir3\\bin/Debug/APP.EXE"
程序员显然期望第二个返回字符串,因为代码执行此操作:
string path = Application.ExecutablePath;
short found = (short)path.LastIndexOf(@"\");
if (found > -1)
{
path = path.Substring(0, found);
}
try
{
foreach (string File in Directory.GetFiles(path + @"\Res\Patterns\", "*.xml"))
{
found = (short)File.LastIndexOf(@"\");
if (found > -1)
//... use files found
并且文件目录存在于Dir3下的两台机器中,因此可以在另一台机器上找到,但不在我的机器上。我无法找到有关Windows决定何时何地返回正斜杠(如URL路径)与使用“\”返回UNC路径的任何信息。为什么这些代码在不同的机器上的工作方式不同?
答案 0 :(得分:1)
我猜你简化为C:\\Dir1\\Dir2\\Dir3/bin/debug
的路径实际上在Dir3名称中有一个哈希(#)。
这显然是Application.ExecutablePath
的怪癖。您可以使用Assembly.GetEntryAssembly().Location
代替,这会返回一致的结果。