我的文件是这样引用的(它都是相对的):
// 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也会导致错误,目前处于脱机状态
答案 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”)