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 路径!
答案 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)));