我正在使用FileInfo类。但是,文件信息找不到该文件。
该文件名为log4Net.config,我已将其添加到我的项目中。我已将属性设置为构建action ='Content'并复制output ='copy always'
当我运行以下代码时:
FileInfo logfileInfo = new FileInfo("Log4Net.config");
if (!logfileInfo.Exists)
{
Console.WriteLine("Cannot find file: " + logfileInfo.FullName);
return;
}
else
{
XmlConfigurator.Configure(logfileInfo);
}
存在总是假的。例外是:找不到文件'Log4Net.config'。
我已经检查了我的PDA并且Log4Net.config已被复制到PDA并且与可执行文件位于同一目录中。所以不确定为什么它找不到它。
只需要一些额外的信息,configure方法需要FileInfo作为参数。
我做错了什么。
非常感谢任何建议,
史蒂夫
答案 0 :(得分:4)
您必须指向项目的根目录。 FileInfo指向OS的根,而不是exe的根。所以你应该改变这样的代码:
FileInfo logfileInfo = new FileInfo(Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase) + @"\Log4Net.config");
答案 1 :(得分:1)
当程序没有访问该文件的安全权限时,也会抛出文件未找到异常,那么可能是这种情况呢?
顺便说一句,你的帖子中有一个矛盾:首先你说这个文件名为“logPDA.config”,然后它突然被称为“Log4Net.config”。只是为了确保,文件的名称总是一样吗?答案 2 :(得分:1)
Windows Mobile与Linux一样,不使用当前目录的概念。所以你需要做的是: How do you get the current directory in compact framework?
答案 3 :(得分:1)
我只能建议您仔细检查Directory.GetCurrentDirectory()
的值。
更新:上面可能无法正常工作 - 请另外一张海报说,How do you get the current directory in compact framework?。
答案 4 :(得分:1)
您假设程序文件夹是当前目录。 Afaik并非如此。您可以从System.IO.Directory.GetCurrentDirectory()
开始进行调查答案 5 :(得分:0)
string logIOFilePath =
Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase),
"Log4Net.config");