我正在尝试在c#中编写一个Logfile类。我想这样做:我写我的日志在第一个日志文件,如果它是超过一定的大小,它将写入第二个日志文件。如果第二个日志文件已满,则删除第一个日志文件并再次写入该日志文件,以此类推。
到目前为止,我有这样的想法:
public class LogfileBuilder
{
StreamWriter sW;
const string file1 = "EventLogging1.txt";
const string file2 = "EventLogging2.txt";
FileInfo fInfo;
public void writeLine(string write)
{
string usingFile;
fInfo = new FileInfo(file1);
long s1 = fInfo.Length;
if (s1 > 300)
{
fInfo = new FileInfo(file2);
long s2 = fInfo.Length;
if (s2 > 300)
{
File.Create(file1).Close();
usingFile = file1;
}
else
{
usingFile = file2;
}
}
else usingFile = file1;
using (sW = File.AppendText(usingFile))
{
sW.WriteLine(write);
}
}
}有人能帮我完成吗?
发布于 2014-04-27 17:02:28
这花了我一些时间,但是(最后)经过一些修改,您的代码现在可以按要求工作了。
public class LogfileBuilder
{
StreamWriter sW;
const string file1 = "EventLogging1.txt";
const string file2 = "EventLogging2.txt";
FileInfo fInfo;
// moved this variable out of function to track which file was used during last writing
string usingFile = null;
public void writeLine(string write)
{
fInfo = new FileInfo(file1);
long s1 = fInfo.Length;
if (s1 > 300)
{
// added below check to delete and re-create the file#1 (of zero bytes)
if (usingFile == file1)
File.Create(file2).Close();
fInfo = new FileInfo(file2);
long s2 = fInfo.Length;
if (s2 > 300)
{
File.Create(file1).Close();
usingFile = file1;
}
else
{
usingFile = file2;
}
}
else
usingFile = file1;
using (sW = File.AppendText(usingFile))
{
sW.WriteLine(write);
}
}
}顺便说一句,您应该看看log4net (也像martin_costello所建议的那样),它有很多特性和灵活性。参考:Apache log4net特性列表
发布于 2014-04-27 15:53:03
我想应该是这样的:
public class LogfileBuilder
{
private const string DEFAULT_PATH_1 = "EventLogging1.txt";
private const string DEFAULT_PATH_2 = "EventLogging2.txt";
private readonly string _filePath1;
private readonly string _filePath2;
private readonly long _delimiterSize;
public LogfileBuilder(long delimiterSize = 300)
{
_filePath1 = DEFAULT_PATH_1;
_filePath2 = DEFAULT_PATH_2;
_delimiterSize = delimiterSize;
}
public LogfileBuilder(string filePath1, string filePath2, long delimiterSize = 300)
{
_filePath1 = filePath1;
_filePath2 = filePath2;
_delimiterSize = delimiterSize;
}
public void Log(string content)
{
//No file1
if(File.Exists(_filePath1) == false)
{
//No file1, file2
if(File.Exists(_filePath2) == false)
{
//Creates/overrides file1
File.WriteAllText(_filePath1, content);
}
//file2, no file1
else
{
var fileInfo = new FileInfo(_filePath2);
//file2 > delimiter
if(fileInfo.Length > _delimiterSize)
{
File.Delete(_filePath2);
//Creates/overrides file1
File.WriteAllText(_filePath1, content);
}
//file2 < delimiter
else
{
File.AppendAllText(_filePath2, content);
}
}
}
//file1
else
{
var fileInfo = new FileInfo(_filePath1);
//file1 > delimiter
if(fileInfo.Length > _delimiterSize)
{
File.Delete(_filePath1);
//Creates/override filepath2
File.WriteAllText(_filePath2, content);
}
//file1 < delimiter
else
{
File.AppendAllText(_filePath1, content);
}
}
}
}https://stackoverflow.com/questions/23324672
复制相似问题