相対パスを使用して日次ログファイルを書き込むログオブジェクトがあります。かなり簡単です(.NET 4.0、VS 2010)。
public void LogLine(string txt)
{
DateTime dt = DateTime.Now;
if (CurrentDay != dt.Day)
{
string newFileName = "..\\Log\\" + programName + dt.Day + ".log";
fs = new FileStream(newFileName, FileMode.Create, FileAccess.Write);
sw = new StreamWriter(fs);
CurrentDay = dt.Day;
}
sw.WriteLine(txt);
}
これはほとんど常にうまく機能します。ただし、パスがまったく異なるランダムなDirectoryNotFoundExceptionのように見えることがあります。たとえば、プログラムを最初に実行すると、次のファイルが作成されます。
C:\ MyFiles \ Log \ MyApp19.log
プログラムをいくつか使用し、それを一晩実行して新しいファイルとストリームが作成された後(深夜以降の最初のログで)、次のようなことを示すDirectoryNotFoundExceptionに戻ります。
C:\ MyFiles \ MyOtherFiles \ Resources \ Log \ MyApp20.log
私が考えることができる唯一のことは、ソフトウェアの存続期間中にOpenFileDialogとSaveFileDialogを数回使用し、それらの開く/保存ダイアログの1つが内のファイルにアクセスすることです。
C:\ MyFiles \ MyOtherFiles \ Resources \ SavedFiles \
したがって、ダイアログを使用すると、何かを開いてSavedFilesディレクトリに保存し、新しいログを作成すると、相対ファイルパス.. \が(SavedFilesから) Resourcesに移動し、見つからないように見えます。ディレクトリはResources内にログを記録し、例外をスローします。ただし、ダイアログを使用して問題を再現することはできず、相対パスは実行可能ファイルに相対的であると思いましたか?[ファイルを開く/保存]ダイアログで、ソフトウェアが相対ファイルパスを計算する方法を変更できますか?誰か考えがありますか?御時間ありがとうございます!