我有一個日誌對象,每日日誌文件寫入一個相對路徑。這很簡單(.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 \登錄\ MyApp19.log
使用一些程序,讓它在夜間運行這樣一個新的文件後,並流創建(在午夜後的第一個日誌),我回來了DirectoryNotFoundException說明是這樣的:
C:\ MYFILES \ MyOtherFiles \資源\登錄\ MyApp20.log
我唯一能想到的是:我在軟件的整個生命週期中使用了OpenFileDialog和SaveFileDialog幾次,其中一個打開/保存對話框訪問
C:\ MyFiles \ MyOtherFiles \資源\ SavedFiles \
所以,在我看來,當我使用的對話,我打開/保存的東西到SavedFiles目錄,當它創建新的日誌,相對文件路徑.. \上升到資源(從SavedFiles),然後找不到d目錄日誌內資源並引發異常。但是,我不能使用對話框重現問題,並且我認爲相對路徑與可執行文件相關?打開/保存文件對話框可以改變軟件計算相對文件路徑的方式嗎?任何人有任何想法?謝謝你的時間!
就以這個[問題]看看(http://stackoverflow.com/questions/930816/why-does-openfiledialog-change-my-工作目錄)。當你使用'OpenFileDialog'時,你的工作目錄被改變了。 – HuorSwords 2013-02-20 15:30:49
@HuorSwords謝謝,我對「工作目錄」這個詞非常天真。有趣的是,如果我在對話框之前和之後打印Directory.GetCurrentDirectory(),兩個打印都是相同的。但是,這個問題肯定來自其中一個對話框。我確信恢復該目錄將起作用,但是令人煩惱的是無法重現我遇到的問題! – Softerware 2013-02-20 15:56:37