system.io.directorynotfound - >但它适用于Console!

时间:2009-08-05 20:45:20

标签: console path executable relative filenotfoundexception

我的文件是这样引用的(它都是相对的):

// WHERE YOU KEEP THE PAGE TITLE XML
    public static string        myPageTitleXML = "xml/pagetitles.xml";

    using (StreamReader r = new StreamReader(myPageTitleXML))
    { //etc.. . .etc....etc..
    }

当我双击可执行文件时,我得到system.io.directorynotfound,并且“此问题需要关闭”。但是从控制台运行它就像一个魅力。这有什么不对?

我试图设置Environment.CurrentDirectory但却无法正常工作。无论如何我为什么要这样做?它违背了相对路径的目的吗?

回复..

“应用程序”在当前上下文中不存在,我将继续尝试人们提到的内容,这不是windows.form

测试

Path.GetDirectoryName(Reflection.Assembly.GetExecutingAssembly()。GetName()。CodeBase),myPageTitleXML);提供错误URI格式不受支持,Path.GetFullPath()也是如此。 Server.MapPath也会导致错误,目前处于脱机状态

3 个答案:

答案 0 :(得分:0)

假设这个目录位于执行代码的目录下,听起来就像你可以使用..

Application.ExecutablePath() 

Application.StartUpPath()

..了解应用程序在搜索带有“pagetitles.xml”文件的“xml”目录时所看到的内容。

如果其中一种方法返回的目录未指向您认为的位置,则需要移动应用程序的位置或此文件夹的位置,以使其与应用程序位于同一目录中。

希望这能让你走上正确的道路。

答案 1 :(得分:0)

因此,当您通过双击可执行文件运行它时,在名为xml的文件夹中是否有名为pagetitles.xml的文件,其中xml是与可执行文件位于同一位置的文件夹?

当然可以使用这样的相对路径,但我不会真的推荐它。相反,也许可以使用类似的东西:

 string fileToOpen = System.IO.Path.Combine(System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase), myPageTitleXML);  
 using (StreamReader r = new StreamReader(fileToOpen))  
 {   
   //etc.. . .etc....etc..  
 }

答案 2 :(得分:0)

这是ASP.NET代码吗?如果是这样,那么你可能需要做MapPath(“xml / pagetitles.xml”)