开发者

directorynotfound exception

A DirectoryNotFound exception keeps happening for no apparent reason. The exception is thrown in:

public static string[] getKeywords(string filename)  
{  
    string[] keywords = XElement.Load(filename).Elements("Keyword").Attributes("name").Select(n => n.Value).ToArray();  
    return keywords;  
}

BUT it is called in this method:

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

UPDATE:

I have a folder in my project called APIs. I checked the file names several times. Here is the exception: Could not find a part of the path 'C:\Users\Mohit\Documents\Visual Studio 2010\Projects\Notepad\Notepad\bin\Debug\APIs\cs.xml'. Thats the EXACT path of the file!


There's little hope of your program ever finding that folder. When you deploy your app, there is no project folder. The best way to organize it is to add the .xml files to your project with Project + Add Existing. Select them in Solution Explorer and in the Properties window set Build action = None and Copy to Output Directory = Copy if Newer. Build. That puts the files in the same directory as your .exe.

Find them back at runtime with System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location)


You might have better luck a fully qualified URL (eg @"D:\mypage\APIs\html.xml")


Looks like you are assuming the current directory is the install directory? You should find the directory like...

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


Are you sure your working directory is the right one? Try to print the absolute path of the . directory. Also, list it's contents and see if that directory really is there.


I'd recommend changing your getKeywords method to be something like this to aid debugging

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

This should give you the full path at which it was attempting to load the file, which should make the problematic path clear to you.


I tried @nobugz method and it worked. Once you set the properties of each *.xml file to:

The best way to organize it is to add the .xml files to your project with Project + Add Existing. Select them in Solution Explorer and in the Properties window set Build action = None and Copy to Output Directory = Copy if Newer. Build. That puts the files in the same directory as your .exe.

Then put this to get your path for each case in your switch case replacing "filename" with each filename you have.

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜