I want to read file continuously like GNU tail with “-f” param. I need it to live-read log file.
What is the right way to do it?
I want to read file continuously like GNU tail with -f param. I need
Share
Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.
Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.
Lost your password? Please enter your email address. You will receive a link and will create a new password via email.
Please briefly explain why you feel this question should be reported.
Please briefly explain why you feel this answer should be reported.
Please briefly explain why you feel this user should be reported.
You want to open a
FileStreamin binary mode. Periodically, seek to the end of the file minus 1024 bytes (or whatever), then read to the end and output. That’s howtail -fworks.Answers to your questions:
Binary because it’s difficult to randomly access the file if you’re reading it as text. You have to do the binary-to-text conversion yourself, but it’s not difficult. (See below)
1024 bytes because it’s a nice convenient number, and should handle 10 or 15 lines of text. Usually.
Here’s an example of opening the file, reading the last 1024 bytes, and converting it to text:
Note that you must open with
FileShare.ReadWrite, since you’re trying to read a file that’s currently open for writing by another process.Also note that I used
Encoding.Default, which in US/English and for most Western European languages will be an 8-bit character encoding. If the file is written in some other encoding (like UTF-8 or other Unicode encoding), It’s possible that the bytes won’t convert correctly to characters. You’ll have to handle that by determining the encoding if you think this will be a problem. Search Stack overflow for info about determining a file’s text encoding.If you want to do this periodically (every 15 seconds, for example), you can set up a timer that calls the
ReadTailmethod as often as you want. You could optimize things a bit by opening the file only once at the start of the program. That’s up to you.