0

FileInfo クラスを使用しています。ただし、ファイル情報はファイルを見つけることができません。

ファイルは log4Net.config と呼ばれ、プロジェクトに追加しました。プロパティを build action = 'Content' および copy output = 'copy always' に設定しました

次のコードを実行すると:

 FileInfo logfileInfo = new FileInfo("Log4Net.config");

 if (!logfileInfo.Exists)
 {
     Console.WriteLine("Cannot find file: " + logfileInfo.FullName);
     return; 
 }
 else
 {
     XmlConfigurator.Configure(logfileInfo);
 }

Exists は常に false です。例外は次のとおりです。ファイル 'Log4Net.config' が見つかりませんでした。

PDA を確認したところ、Log4Net.config が PDA にコピーされており、実行可能ファイルと同じディレクトリにあります。なぜそれが見つからないのか分かりません。

configure メソッドが FileInfo をパラメータとして期待する追加情報です。

私は何か間違ったことをしていますか?

アドバイスありがとうございました。

スティーブ

4

4 に答える 4

4

プロジェクトのルートを指す必要があります。FileInfo は、exe のルートではなく、OS のルートを指します。したがって、次のようにコードを変更する必要があります。

FileInfo logfileInfo = new FileInfo(Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase) + @"\Log4Net.config");
于 2009-06-09T10:36:32.500 に答える
1

プログラムフォルダが現在のディレクトリであると想定しています。そうではないAfaik。System.IO.Directory.GetCurrentDirectory()から調査できます。

于 2009-06-09T10:24:36.283 に答える
1

プログラムがファイルにアクセスするためのセキュリティ権限を持っていない場合にも、ファイルが見つからないという例外がスローされます。

ところで、あなたの投稿には矛盾があります。最初にファイルが「logPDA.config」と呼ばれると言い、次に突然「Log4Net.config」と呼ばれます。念のために言っておきますが、ファイルの名前は常に同じですか?

于 2009-06-09T10:13:14.433 に答える
0
 string logIOFilePath = 
                Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase), 
                "Log4Net.config");
于 2009-06-09T10:37:24.290 に答える