C# directorynotfound异常

C# directorynotfound异常,c#,C#,DirectoryNotFound异常无明显原因持续发生。异常被抛出: public static string[] getKeywords(string filename) { string[] keywords = XElement.Load(filename).Elements("Keyword").Attributes("name").Select(n => n.Value).ToArray(); return keywords; } 但在此方法中

DirectoryNotFound异常无明显原因持续发生。异常被抛出:

public static string[] getKeywords(string filename)  
{  
    string[] keywords = XElement.Load(filename).Elements("Keyword").Attributes("name").Select(n => n.Value).ToArray();  
    return keywords;  
}
但在此方法中调用它:

public static void SyntaxHighlight(SyntaxHighlighter.SyntaxRichTextBox textbox, Language language)  
{  
    switch (language)  
    {  
        case Language.Cmake:  
            textbox.Settings.Comment = "#";  
            string[] CmakeKeywords = getKeywords("APIs\\cmake.xml");  
            textbox.Settings.Keywords.AddRange(CmakeKeywords);  
            break;  
        case Language.CSharp:  
            textbox.Settings.Comment = "//";  
            string[] CSharpKeywords = getKeywords("APIs\\cs.xml");  
            textbox.Settings.Keywords.AddRange(CSharpKeywords);  
            break;  
        case Language.HTML:  
            textbox.Settings.Comment = "<!";  
            string[] HTMLKeywords = getKeywords("APIs\\html.xml");  
            textbox.Settings.Keywords.AddRange(HTMLKeywords);  
            break;  
        case Language.Python:  
            textbox.Settings.Comment = "#";  
            string[] PythonKeywords = getKeywords("APIs\\python.xml");  
            textbox.Settings.Keywords.AddRange(PythonKeywords);  
            break;  
    }  
}
public static void SyntaxHighlight(SyntaxHighlighter.SyntaxRichTextBox文本框,语言)
{  
开关(语言)
{  
案例语言.Cmake:
textbox.Settings.Comment=“#”;
字符串[]CmakeKeywords=getKeywords(“API\\cmake.xml”);
textbox.Settings.Keywords.AddRange(CmakeKeywords);
打破
case Language.CSharp:
textbox.Settings.Comment=“/”;
字符串[]CSharpKeywords=getKeywords(“API\\cs.xml”);
textbox.Settings.Keywords.AddRange(CSharpKeywords);
打破
case Language.HTML:

textbox.Settings.Comment=“您可能会更幸运地找到一个完全限定的URL(例如
@“D:\mypage\api\html.xml”

您可能会更幸运地找到一个完全限定的URL(例如
@“D:\mypage\api\html.xml”

你确定你的工作目录是正确的吗?试着打印
目录的绝对路径。另外,列出它的内容,看看该目录是否真的存在。

你确定你的工作目录是正确的吗?试着打印
目录的绝对路径。另外,列出它的内容,看一看如果该目录确实存在。

看起来您假设当前目录是安装目录?您应该找到如下目录

string path = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) +
              Environment.DirectorySeparatorChar +
              "file you are looking for".

看起来您假设当前目录是安装目录?您应该找到如下目录

string path = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) +
              Environment.DirectorySeparatorChar +
              "file you are looking for".

您的程序找不到该文件夹的希望很小。部署应用程序时,没有项目文件夹。组织该文件夹的最佳方法是使用project+add Existing将.xml文件添加到项目中。在解决方案资源管理器和“属性”窗口中选择它们,设置“生成操作=无”,并复制到输出目录=复制(如果新)r、 将文件放在与.exe相同的目录中


在运行时使用System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location)找到它们

您的程序几乎不可能找到该文件夹。部署应用程序时,没有项目文件夹。组织该文件夹的最佳方法是使用project+add Existing将.xml文件添加到项目中。在解决方案资源管理器中,在“属性”窗口中选择它们,设置“Build action=None”并复制到“输出目录”=Copy if更新的.Build。将文件放在与.exe相同的目录中


使用System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location)在运行时找到它们。

我建议将getKeywords方法更改为类似这样的方法以帮助调试

public static string[] getKeywords(string filename)  
{  
    var file = new FileInfo(filename);
    if (!file.Exists)
    {
        throw new FileNotFoundException("The requested file was not found: " + file.FullName);
    }
    string[] keywords = XElement.Load(filename).Elements("Keyword").Attributes("name").Select(n => n.Value).ToArray();  
    return keywords;  
}

这将为您提供尝试加载文件的完整路径,这将使您清楚地看到有问题的路径。

我建议将getKeywords方法更改为类似这样的方法,以帮助调试

public static string[] getKeywords(string filename)  
{  
    var file = new FileInfo(filename);
    if (!file.Exists)
    {
        throw new FileNotFoundException("The requested file was not found: " + file.FullName);
    }
    string[] keywords = XElement.Load(filename).Elements("Keyword").Attributes("name").Select(n => n.Value).ToArray();  
    return keywords;  
}

这将为您提供尝试加载文件的完整路径,这将使您清楚地看到有问题的路径。

我尝试了@nobugz方法,它成功了。一旦您将每个*.xml文件的属性设置为:

组织该文件的最佳方法是使用project+add Existing将.xml文件添加到项目中。在解决方案资源管理器和属性窗口中选择它们,设置Build action=None并复制到Output Directory=Copy if Newer.Build。这将使文件与.exe位于同一目录中

然后将此项用于获取交换机机箱中每个机箱的路径,并将“文件名”替换为您拥有的每个文件名

string[] YourVar = getKeywords(string.Format("{0}\\APIs\\filename.xml", Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location)));

我尝试了@nobugz方法,它成功了。一旦您将每个*.xml文件的属性设置为:

组织该文件的最佳方法是使用project+add Existing将.xml文件添加到项目中。在解决方案资源管理器和属性窗口中选择它们,设置Build action=None并复制到Output Directory=Copy if Newer.Build。这将使文件与.exe位于同一目录中

然后将此项用于获取交换机机箱中每个机箱的路径,并将“文件名”替换为您拥有的每个文件名

string[] YourVar = getKeywords(string.Format("{0}\\APIs\\filename.xml", Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location)));

讽刺的是,我不得不编辑你的语法高亮显示:)对不起,但你为什么坚持块引用你的代码?!?有一个语法高亮显示帮助我们更好地阅读和查看代码。对不起。我对这个论坛上的语法高亮显示有点陌生。讽刺的是,我不得不编辑你的语法高亮显示:)对不起,但你为什么坚持块引用修改你的代码?!?有一个语法高亮程序可以帮助我们更好地阅读和查看代码。对不起。我对这个论坛上的语法高亮程序有点陌生。这是一个桌面应用程序,可能已经部署,所以我无法输入完整的文件名,因为我不知道用户将在哪里安装它。这是一个桌面应用程序,可能已经部署,所以我无法放置完整文件名,因为我不知道用户将在何处安装它。