FileInfo compact framework 3.5 - не удается найти файл - PullRequest
0 голосов
/ 09 июня 2009

Я использую класс 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'.

Я проверил на своем КПК, и Log4Net.config скопировал КПК и находится в том же каталоге, что и исполняемый файл. Поэтому не уверен, почему он не может его найти.

Просто дополнительная информация, которую метод configure ожидает в качестве параметра FileInfo.

Я что-то не так делаю.

Большое спасибо за любой совет,

Steve

Ответы [ 6 ]

4 голосов
/ 09 июня 2009

Вы должны указать на корень вашего проекта. FileInfo указывает на корень ОС, а не на корень exe. Поэтому вы должны изменить код следующим образом:

FileInfo logfileInfo = new FileInfo(Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase) + @"\Log4Net.config");
1 голос
/ 09 июня 2009

Предполагается, что папка программы является текущей папкой. Афайк, это не тот случай. Вы можете исследовать, начиная с System.IO.Directory.GetCurrentDirectory ()

1 голос
/ 09 июня 2009

Я могу только предложить, чтобы вы дважды проверили значение Directory.GetCurrentDirectory().

Обновление: выше может не сработать - попробуйте, как говорит один из авторов, Как получить текущий каталог в компактной среде? .

1 голос
/ 09 июня 2009

Windows Mobile, как и Linux, не использует концепцию текущего каталога. Так что вам нужно сделать что-то вроде: Как получить текущий каталог в компактном фреймворке?

1 голос
/ 09 июня 2009

Исключение не найденный файл также выдается, когда программа не имеет разрешения безопасности для доступа к файлу, так что, возможно, это так?

Кстати, в вашем Посте есть противоречие: сначала вы говорите, что файл называется «logPDA.config», а затем внезапно называется «Log4Net.config». Просто чтобы убедиться, что файл всегда называется одинаковым?

0 голосов
/ 09 июня 2009
 string logIOFilePath = 
                Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase), 
                "Log4Net.config");
...