directorynotfound异常

时间:2010-01-12 22:31:13

标签: c#

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;  
    }  
}

更新:
我的项目中有一个名为API的文件夹。我多次检查文件名。以下是例外:Could not find a part of the path 'C:\Users\Mohit\Documents\Visual Studio 2010\Projects\Notepad\Notepad\bin\Debug\APIs\cs.xml'.这是文件的 EXACT 路径!

6 个答案:

答案 0 :(得分:3)

您的程序找不到该文件夹​​的希望渺茫。部署应用程序时,没有项目文件夹。组织它的最佳方法是使用Project + Add Existing将.xml文件添加到项目中。在解决方案资源管理器中选择它们,然后在属性窗口中设置构建操作=无和复制到输出目录=复制如果更新。建立。这会将文件放在与.exe。

相同的目录中

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

答案 1 :(得分:1)

您可能会更幸运一个完全限定的网址(例如@"D:\mypage\APIs\html.xml"

答案 2 :(得分:1)

看起来你假设当前目录是安装目录?你应该找到像...这样的目录。

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

我建议将你的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;  
}

这应该会为您提供完整的路径,在该路径下它会尝试加载文件,这会让您清楚地看到有问题的路径。

答案 5 :(得分:0)

我尝试了@nobugz方法并且有效。将每个* .xml文件的属性设置为:

  

组织它的最佳方法是使用Project + Add Existing将.xml文件添加到项目中。在解决方案资源管理器中选择它们,然后在属性窗口中设置构建操作=无和复制到输出目录=复制如果更新。建立。这会将文件放在与.exe。

相同的目录中

然后把这个用来获取你的交换机案例中每个案例的路径,用你拥有的每个文件名替换“filename”。

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