我的应用程序有一个日志文件,日志文件最多有10个日志文件 可以创建。代码段如下,
Stream logFileStream = null;
string file = Config.LOG_FILE;
m_strLogfile = Config.LOG_FILE + Config.LOG_FILE_EXT;
while (File.Exists(m_strGeneralFilePath + file + Config.LOG_FILE_EXT))
{
logFileStream = File.OpenRead(m_strGeneralFilePath + file + Config.LOG_FILE_EXT);
// if(!logFileStream.Length.Equals(logSize))
if ( logFileStream.Length > Convert.ToInt32(logSize)) // approx. 1MB 1.000.000
{
for (int i = 9; i > 0; i--)
{
if (i == 9)
{
if (File.Exists(Config.LOG_FILE + i + Config.LOG_FILE_EXT))
{
File.Delete(Config.LOG_FILE + i + Config.LOG_FILE_EXT);
}
}
if (File.Exists(m_strGeneralFilePath + Config.LOG_FILE + i + Config.LOG_FILE_EXT))
{
System.IO.File.Move(m_strGeneralFilePath + Config.LOG_FILE + i + Config.LOG_FILE_EXT, m_strGeneralFilePath + Config.LOG_FILE + (i + 1) + Config.LOG_FILE_EXT);
}
}
System.IO.File.Move(m_strGeneralFilePath + Config.LOG_FILE + Config.LOG_FILE_EXT, m_strGeneralFilePath + Config.LOG_FILE + "1" + Config.LOG_FILE_EXT);
File.Create(m_strGeneralFilePath + Config.LOG_FILE + Config.LOG_FILE_EXT);
}
}
if (logFileStream != null)
{
logFileStream.Close();
logFileStream.Dispose();
}
一旦System.IO.File.Move(m_strGeneralFilePath + Config.LOG_FILE + Config.LOG_FILE_EXT, m_strGeneralFilePath + Config.LOG_FILE + "1" + Config.LOG_FILE_EXT);
遇到一个异常,说“它被某些其他进程使用”,我怎么能摆脱这个?
请帮帮我。
提前谢谢。
我正在使用.net 4.0 c#winforms。
答案 0 :(得分:2)
抛出异常是因为您正在尝试移动已在流对象“logFileStream”中读取的文件。所以你需要做的就是在你开始移动它之前关闭这个文件流,而不是最后。
您的代码应该是这样的,请注意我在移动声明之前提供的关闭和处理声明。
Stream logFileStream = null;
string file = Config.LOG_FILE;
m_strLogfile = Config.LOG_FILE + Config.LOG_FILE_EXT;
while (File.Exists(m_strGeneralFilePath + file + Config.LOG_FILE_EXT))
{
logFileStream = File.OpenRead(m_strGeneralFilePath + file + Config.LOG_FILE_EXT);
// if(!logFileStream.Length.Equals(logSize))
if ( logFileStream.Length > Convert.ToInt32(logSize)) // approx. 1MB 1.000.000
{
// this is where you should close the file stream, assuming that you are not using the stream anymore.
logFileStream.Close();
logFileStream.Dispose();
for (int i = 9; i > 0; i--)
{
if (i == 9)
{
if (File.Exists(Config.LOG_FILE + i + Config.LOG_FILE_EXT))
{
File.Delete(Config.LOG_FILE + i + Config.LOG_FILE_EXT);
}
}
if (File.Exists(m_strGeneralFilePath + Config.LOG_FILE + i + Config.LOG_FILE_EXT))
{
System.IO.File.Move(m_strGeneralFilePath + Config.LOG_FILE + i + Config.LOG_FILE_EXT, m_strGeneralFilePath + Config.LOG_FILE + (i + 1) + Config.LOG_FILE_EXT);
}
}
System.IO.File.Move(m_strGeneralFilePath + Config.LOG_FILE + Config.LOG_FILE_EXT, m_strGeneralFilePath + Config.LOG_FILE + "1" + Config.LOG_FILE_EXT);
File.Create(m_strGeneralFilePath + Config.LOG_FILE + Config.LOG_FILE_EXT);
}
}
答案 1 :(得分:0)
之后FileStream没有关闭,所以改变是, 我只是换了线 File.Create(m_strGeneralFilePath + Config.LOG_FILE + Config.LOG_FILE_EXT);使用块更方便。
using (FileStream fs = File.Create(m_strGeneralFilePath + Config.LOG_FILE + Config.LOG_FILE_EXT))
{
fs.Flush();
fs.Close();
}