【发布时间】:2013-02-05 16:10:00
【问题描述】:
我有一个日志对象,它使用相对路径写入每日日志文件。这相当简单(.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,其中一个打开/保存对话框访问了
C:\MyFiles\MyOtherFiles\Resources\SavedFiles\
所以在我看来,当我使用对话框时,我打开/保存了一些内容到 SavedFiles 目录中,当它创建新日志时,相对文件路径 ..\ 上升到 Resources(来自 SavedFiles),然后在 Resources 中找不到目录 Log并抛出异常。但是,我无法使用对话框重现问题,并且我认为相对路径是相对于可执行文件的?打开/保存文件对话框能否改变软件计算相对文件路径的方式?有人有什么想法吗?感谢您的宝贵时间!
【问题讨论】:
-
看看这个question。当您使用
OpenFileDialog时,您的工作目录会发生变化。 -
@HuorSwords 谢谢,我对“工作目录”这个词太天真了。对我来说有趣的是,如果我在对话前后打印 Directory.GetCurrentDirectory() ,两个打印件是相同的。但是,问题肯定来自其中一个对话框。我确信恢复目录会起作用,但是无法重现我遇到的问题很烦人!
标签: c# .net path directory filestream