1

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

// 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 也会导致错误,目前处于离线状态

4

3 回答 3

0

好吧,假设此目录位于执行代码的目录下,听起来您可以使用 ..

Application.ExecutablePath() 

或者

Application.StartUpPath()

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

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

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

于 2009-08-05T20:53:42.247 回答
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..  
 }
于 2009-08-05T20:55:35.537 回答
0

这是 ASP.NET 代码吗?如果是这样,那么您可能需要执行 MapPath("xml/pagetitles.xml")

于 2009-08-05T21:03:16.737 回答