C# 无法使用c读取xml文件#

C# 无法使用c读取xml文件#,c#,xml,C#,Xml,我正在尝试使用c读取xml文件# 我把断点保留在第二行和第三行。我在下面的行中得到错误 doc.Load(@"/Rules/AssessmentRule.xml"); 上面说 找不到路径“C:\Program”的一部分 文件\Rules\AssessmentRule.xml' 我的项目的文件夹结构是, 在调试中运行时,规则文件夹与我的类文件位于同一位置。除非您使用完整路径访问文件,否则路径基于“bin\debug”,它将相对于该文件夹。在调试中运行时,路径基于“bin\debug”,除非您使用

我正在尝试使用c读取xml文件#

我把断点保留在第二行和第三行。我在下面的行中得到错误

doc.Load(@"/Rules/AssessmentRule.xml");
上面说

找不到路径“C:\Program”的一部分 文件\Rules\AssessmentRule.xml'

我的项目的文件夹结构是,
在调试中运行时,规则文件夹与我的类文件位于同一位置。除非您使用完整路径访问文件,否则路径基于“bin\debug”,它将相对于该文件夹。

在调试中运行时,路径基于“bin\debug”,除非您使用完整路径访问文件,否则路径将相对于该文件夹文件夹。

您需要获取项目目录,然后附加xml路径

string projectPath = Directory.GetParent(Directory.GetCurrentDirectory()).Parent.FullName;
string xmlLocation = @"Rules/AssessmentRule.xml";
String fullPath = Path.Combine(projectPath,xmlLocation);

您需要获取项目目录,然后附加xml路径

string projectPath = Directory.GetParent(Directory.GetCurrentDirectory()).Parent.FullName;
string xmlLocation = @"Rules/AssessmentRule.xml";
String fullPath = Path.Combine(projectPath,xmlLocation);

在调试中运行时,路径基于调试设置,默认为bin\debug,除非您使用完整路径访问文件,否则该文件将相对于该文件夹(bin\debug)。[由米尔顿提供]

下面是两个解决方案

您可以将该文件添加到VS项目中。然后在VS go to properties set‘复制到输出目录’->始终复制中单击该文件。然后只需要给出文件名

或者像这样获取项目目录

string projectPath = Directory.GetParent(Directory.GetCurrentDirectory()).Parent.FullName;
string xmlLocation = @"Rules/AssessmentRule.xml";
String fullPath = Path.Combine(projectPath,xmlLocation);

在调试中运行时,路径基于调试设置,默认为bin\debug,除非您使用完整路径访问文件,否则该文件将相对于该文件夹(bin\debug)。[由米尔顿提供]

下面是两个解决方案

您可以将该文件添加到VS项目中。然后在VS go to properties set‘复制到输出目录’->始终复制中单击该文件。然后只需要给出文件名

或者像这样获取项目目录

string projectPath = Directory.GetParent(Directory.GetCurrentDirectory()).Parent.FullName;
string xmlLocation = @"Rules/AssessmentRule.xml";
String fullPath = Path.Combine(projectPath,xmlLocation);

如果该文件位于项目文件夹中,请尝试使用以下代码获取路径

string wanted_path = Path.GetDirectoryName(Path.GetDirectoryName(System.IO.Directory.GetCurrentDirect‌​ory()));

然后找到该路径上的文件。

如果该文件位于项目文件夹中,请尝试使用以下代码获取路径

string wanted_path = Path.GetDirectoryName(Path.GetDirectoryName(System.IO.Directory.GetCurrentDirect‌​ory()));

然后在该路径上查找文件。

您可能应该使用
打开文件对话框。这会让你的生活更轻松:

var openFile = new Microsoft.Win32.OpenFileDialog() {
    CheckFileExists = true,
    CheckPathExists = true,
    Filter = "XML File|*.xml"
};

if (openFile.ShowDialog() ?? false)
{
    XmlDocument doc = new XmlDocument();
    doc.Load(openFile.FileName);
    XmlNode node = doc.SelectSingleNode("/RuleName");
    string URI = node.InnerText;

    return URI;
}
else
{
    // User clicked cancel
    return String.Empty;
}

您可能应该使用
OpenFileDialog
。这会让你的生活更轻松:

var openFile = new Microsoft.Win32.OpenFileDialog() {
    CheckFileExists = true,
    CheckPathExists = true,
    Filter = "XML File|*.xml"
};

if (openFile.ShowDialog() ?? false)
{
    XmlDocument doc = new XmlDocument();
    doc.Load(openFile.FileName);
    XmlNode node = doc.SelectSingleNode("/RuleName");
    string URI = node.InnerText;

    return URI;
}
else
{
    // User clicked cancel
    return String.Empty;
}


C:\Program Files\Rules\AssessmentRule.xml所以此路径中没有文件?您是否签入了资源管理器?没有xml文件在我的项目文件夹中,我不知道如何让它访问此项目文件夹路径鉴于其
C:\Program Files\
您可能需要提升权限。类文件的路径是什么?最有可能是“我的可执行文件旁边的读取文件”的副本。。。从C:\Program Files\Rules\AssessmentRule.xml开始,因此此路径中没有文件?您是否签入了资源管理器?没有xml文件在我的项目文件夹中,我不知道如何让它访问此项目文件夹路径鉴于其
C:\Program Files\
您可能需要提升权限。类文件的路径是什么?最有可能是“我的可执行文件旁边的读取文件”的副本。。。在删除前导正斜杠
@“Rules/AssessmentRule.xml”之前,将不会组合“Start with Path”奇怪的是,你的答案顶部的文本与我的答案相同,但你的时间戳在后面。当你否决一个非常详细的答案时,这似乎很奇怪:)我们是来帮助别人的。我不会投票否决你,因为你的答案没有错。我喜欢你的答案,如果你有礼貌地参考我的答案,我会投更高的票。那会很好。到目前为止,您的答案是最好的。路径本身并不是基于“bin\debug”,而是基于调试设置中的工作目录,默认为bin\debug(如果在调试模式下运行)。只有删除前导正斜杠
@“Rules/AssessmentRule.xml”,才能组合路径奇怪的是,你的答案顶部的文本与我的答案相同,但你的时间戳在后面。当你否决一个非常详细的答案时,这似乎很奇怪:)我们是来帮助别人的。我不会投票否决你,因为你的答案没有错。我喜欢你的答案,如果你有礼貌地参考我的答案,我会投更高的票。那会很好。到目前为止,您的答案是最好的。路径本身并不是基于“bin\debug”,而是基于调试设置中的工作目录,默认为bin\debug(如果在调试模式下运行)。只有删除前导正斜杠
@“Rules/AssessmentRule.xml”,才能组合路径@“Rules/AssessmentRule.xml”之前,不会合并代码>路径路径本身不是基于“bin\debug”,而是基于调试设置中的工作目录,默认为bin\debug。此外,我不确定这是如何回答OPs问题的。路径本身不是基于“bin\debug”,而是基于调试设置中的工作目录,默认为bin\debug。此外,我不确定这是如何回答OPs问题的。这是不正确的-程序应该能够在没有用户交互的情况下打开文件,我相信OP正在尝试这样做。这是不正确的-程序应该能够在没有用户交互的情况下打开文件,我相信OP正在尝试这样做。