【发布时间】:2011-07-02 14:24:01
【问题描述】:
我的程序正在将数据记录到文件中,同时用户界面会实时显示传入的数据。如果计算机/程序/操作系统/任何东西关闭,我希望记录的数据在一两秒内存储在磁盘上。数据至少以 100 次/秒的速度传入。
我希望用户能够在日志记录处于活动状态时给日志文件一个新名称。问题是我无法在打开文件时更改文件的名称,即使它是通过相同的进程进行的。
测试用例:
string fileName1 = "test.txt";
string fileName2 = "test2.txt";
using (StreamWriter sw = new StreamWriter(new FileStream(fileName1, FileMode.Create)))
{
sw.WriteLine("before");
File.Move(fileName1, fileName2); //<<-- IOException - The process cannot access the file because it is being used by another process.
w.WriteLine("after");
}
那么,如何在同一个进程打开文件的流时重命名进程中的文件?
【问题讨论】:
-
如果你要记录这么多数据,你真的应该尝试像 log4net (logging.apache.org/log4net) 这样的日志库。
-
不幸的是,当你使用它的流时,你不能移动文件或改变它的名字,甚至不能删除它,就像它被另一个程序使用一样......