获取文本文件并随应用程序一起提供

时间:2012-10-17 21:35:34

标签: c# asp.net file exception-handling path

我有一个存储一些网站链接的文件。到现在为止我用过:

string path = Environment.CurrentDirectory + "/forumlinks.txt";

但是我想将文件存储在release文件夹中,以便我可以更改它,我知道它将永久地为用户更改。

所以我改为:

string path = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + @"/forumlinks.txt";

但我得到一个例外:

  

System.IO.FileNotFoundException。

我的问题:这是从release文件夹中获取文件的正确方法吗?我应该重新考虑并将他存放在不同的地方吗?如果是这样,我会很高兴听到它。

4 个答案:

答案 0 :(得分:4)

我没有看到你需要调用

的原因
System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location)) 

完全没有。这就是诀窍:

AppDomain.CurrentDomain.BaseDirectory

答案 1 :(得分:1)

好吧假设前锋/是一个错字。 如果你已经将测试文件添加到你的项目中,检查它的属性,需要复制,如果更新/复制总是将它放在bin \ Debug或bin \ Release中,使用exe和dll以及其他gubbins。

为什么你这样做,你是否计划改变文件,而不必重建应用程序?

答案 2 :(得分:1)

对代码发布文件夹的路径进行硬编码很危险。如果由于某种原因想要在调试模式下构建怎么办?如果要部署程序会发生什么?

更好的选择是使用环境的应用程序数据文件夹。这对每个用户都是不同的,因此这意味着每个用户都可以拥有自己的文件版本。

有关如何获取应用程序数据文件夹的详细信息,请参阅this post

答案 3 :(得分:0)

我犯了一个错误,发现使用这段代码是正确的:

string path =  System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + "\\fourmlinks.txt";

如果你输入正确的文件名,仍然会得到一个异常,意味着该文件不在正确的位置。