查找文件路径

问题描述:

我正在开发一个C#Visual Studio应用程序,并使用了一个config.txt文件。但是,当应用程序安装在另一台机器上时,如何才能找到config.txt文件路径,并考虑到用户将在自定义路径(C:\ Folder X)上安装应用程序?查找文件路径

+0

这将取决于你是如何安装应用程序。请提供更多关于如何安装应用程序的信息。 – 2012-02-02 12:40:00

+0

大家都假设文件将与可执行文件一起使用,而OP没有提及任何有关它的信息。 – 2012-02-02 12:42:21

+1

该应用程序打包在一个msi中,并且该文件与msi向导中用户给出的路径中的其他文件(包括exe文件)一起解压缩。我需要这个文件的路径来读取应用程序执行时的配置。可以修改文件内容以更改应用程序的配置。 – yoozz 2012-02-02 13:09:02

如果配置文件在同一目录下的可执行文件,你可以使用:

string exePath = Assembly.GetExecutingAssembly().Location; 
string configFileName = "config.txt"; 

string configFilePath = Path.Combine(Path.GetDirectoryName(exePath), configFileName); 

编辑:

GetExecutingAssembly()应该返回的路径C:\Program Files\MyAddIn\your_plugin.dll,因为它返回调用它的加载程序集的实际路径。由于事实并非如此,我们可以猜测MS Project实际上是在加载它之前将其复制到本地(也许是临时)目录中(....\AppData\Local\Assembly\...路径)。

由于我不知道为什么 MS项目是如何做到这一点,来处理你的问题,我认为最安全的方式是你的外接程序文件夹的位置存储到上安装的注册表。如果您将它作为MSI发布,应该很容易让您的安装程序添加一个包含您的插件文件位置的注册表项。如何做到这一点将取决于你如何建立你的MSI:vdproj?维克斯?

然后在您的插件的代码中,您可以读入注册表以获取您的路径。

+0

这给了我以下路径:C:\ Users \ UserName \ AppData \ Local \ Assembly \ dl3 .... \ config.txt。但是该文件是:C:\ Program Files \ Application \ config.txt – yoozz 2012-02-02 13:13:45

+0

@yozcia看起来像您从位于另一个位置的程序集中调用代码而不是可执行文件本身。尝试用'GetEntryAssembly'代替'GetExecutingAssembly' – ken2k 2012-02-02 13:17:23

+0

这给了我null错误:对象引用未设置为对象的实例。我的应用程序是MS PROJECT的附件。它的功能是每次打开MS PROJECT时读取配置文件。问题是,当我在不同的路径上安装应用程序时,我找不到路径了。 – yoozz 2012-02-02 13:36:50

而不是使用文本文件,您可以使用.net设置来存储此应用程序的设置。

更多信息可以看出here

如果配置文件是在同一文件夹中的应用程序,你可以使用Assembly.GetExecutingAssembly().Location