2009-10-15 70 views
0

我通过ClickOnce发布应用程序(运行'从网络'在线'),应用程序中包含几个文本文件,这些文件在发布时会正确复制到部署位置。检索包含在ClickOnce应用程序中的文件的路径?

我试图指编程这些文件的路径:

Dim t As New HTMLTemplate("ReportTemplates\IncidentDetailMain.txt") 

有时候这工作,有时应用程序似乎在用户查看My Documents文件夹,导致DirectoryNotFoundException。

任何人都可以解释这里发生了什么?

回答

3

最好的办法是使用

System.Windows.Forms.Application.StartupPath 

,这将给你的URI文件夹中的可执行文件应用程序是。然后,您可以使用那些在您的情况下始终应该与可执行文件相同的相对路径的参考文件。

MSDN: Application.StartupPath

这可以WinForms和WPF应用程序可以使用两者。

如果让用户打开/保存文件等,System.Environment.CurrentDirectory可能会在应用程序的生命周期中更改 - 因此StartupPath更安全。

那么,您的最终代码如下:

string filePath = Path.Combine(
    System.Windows.Forms.Application.StartupPath, 
    "ReportTemplates\IncidentDetailMain.txt"); 
.. = new HTMLTemplate(filePath); 
1

最安全的方法是获取exe文件的路径,然后使用它作为基础。

您可以通过以下位置做到这一点,System.Environment.CurrentDirectory

+0

谢谢,这似乎仍然是工作,我会等待,看看错误再次发生。 – Simon 2009-10-15 10:13:21

+0

是的,问题间歇性地重现,我希望@andhammar的答案能够解决。 – Simon 2009-10-29 18:15:31

+0

如果您使用CurrentDirectory,则必须在应用程序启动时执行此操作,并将其保存。它可能会改变!例如打开一个文件对话框并导航到一个文件夹实际上会改变CurrentDirectory – 2012-01-04 04:04:56

相关问题