tags:

views:

107

answers:

2

In our customized C# logging system, we use streamWriter = File.CreateText(fileNameStr); to create a file and open a stream for write.

Now we want to monitor the file size to see if it reach the max required size. What I did is the following:

  1. create a FileInfo object for about file: currFileInfo = new FileInfo(fileNameStr);
  2. get file size after each write: curFileInfo.Refresh(); fileSize = curFileInfo.Length;
  3. compare the file size with max file size, if bigger, close the current one and create a new file.

I have print out to see how long it will take to refresh the FileInfo, many times it will take about 15msec.

So I am thinking there may be a better way to do this. what's your suggestion?

+5  A: 

This should work:

streamWriter.BaseStream.Position;

This should contain the current position of the stream and if you're using it for appending only, this should contain the correct file size.

Pieter
+1  A: 
FileSystemWatcher fsw=new FileSystemWatcher(filePath);
fsw.NotifyFilter=NotifyFilters.Size;
fsw.Filter="fileName";
fsw.Changed += new FileSystemEventHandler(YourHandler); 
fsw.EnableRaisingEvents = True;
Bolu
+1 Good idea, but you should mention what this code does and how. It's a different from 5yrs' approach in that it creates a monitor which will fire events. So the approach here is event driven as opposed to a polling system that the OP started with.
Paul Sasik