我怎么知道这是App的当前文件夹? 我的意思是......有没有办法知道exe在运行代码中的位置?
提前致谢
答案 0 :(得分:8)
Windows Mobile没有当前文件夹的概念。无论您的应用程序位于何处,“当前文件夹”基本上始终设置为文件系统的根目录。
要获取应用程序所在的路径,您可以使用Assembly.GetExecutingAssembly()
和CodeBase
属性或GetName()
方法
答案 1 :(得分:6)
string fullAppName = Assembly.GetCallingAssembly().GetName().CodeBase;
string fullAppPath = Path.GetDirectoryName(fullAppName);
答案 2 :(得分:4)
不要打击系统。
Microsoft不希望您将程序文件文件夹用于除程序集之外的任何其他内容。配置文件应该放在用户需要知道的应用程序数据,保存文件等中,然后进入我的文档。
jalf的答案会奏效,但你正在与系统作斗争。除非他们想知道你的程序集所在的文件夹是一个非常好的理由,否则我建议不要这样做。
答案 3 :(得分:2)
您可以使用GetModuleFileName
在下面的示例中,方法GetExecutablePath
返回exe的位置,GetStartupPath
返回exe的目录。
using System;
using System.ComponentModel;
using System.IO;
using System.Runtime.InteropServices;
using System.Text;
class Program
{
[DllImport("coredll", SetLastError = true)]
public static extern uint GetModuleFileName(IntPtr hModule, StringBuilder lpFilename, [MarshalAs(UnmanagedType.U4)] int nSize);
[DllImport("coredll")]
public static extern uint FormatMessage([MarshalAs(UnmanagedType.U4)] FormatMessageFlags dwFlags, IntPtr lpSource, uint dwMessageId, uint dwLanguageId, out IntPtr lpBuffer, uint nSize, IntPtr Arguments);
[DllImport("coredll")]
public static extern IntPtr LocalFree(IntPtr hMem);
[Flags]
internal enum FormatMessageFlags : uint
{
AllocateBuffer = 256,
FromSystem = 4096,
IgnoreInserts = 512
}
public static string GetModuleFileName(IntPtr hModule)
{
StringBuilder lpFilename = new StringBuilder(short.MaxValue);
uint num = GetModuleFileName(hModule, lpFilename, lpFilename.Capacity);
if (num == 0)
{
throw CreateWin32Exception(Marshal.GetLastWin32Error());
}
return lpFilename.ToString();
}
private static Win32Exception CreateWin32Exception(int error)
{
IntPtr buffer = IntPtr.Zero;
try
{
if (FormatMessage(FormatMessageFlags.IgnoreInserts | FormatMessageFlags.FromSystem | FormatMessageFlags.AllocateBuffer, IntPtr.Zero, (uint)error, 0, out buffer, 0, IntPtr.Zero) == 0)
{
return new Win32Exception();
}
return new Win32Exception(error, Marshal.PtrToStringUni(buffer));
}
finally
{
if (buffer != IntPtr.Zero)
{
LocalFree(buffer);
}
}
}
public static string GetStartupPath()
{
return Path.GetDirectoryName(GetExecutablePath());
}
public static string GetExecutablePath()
{
return GetModuleFileName(IntPtr.Zero);
}
}
答案 4 :(得分:2)
以下是正确的。
string fullAppName = Assembly.GetCallingAssembly().GetName().CodeBase;
fullAppPath = Path.GetDirectoryName(fullAppName);
有关其他语言的等效代码,请参阅此link