• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 469
  • Last Modified:

most efficient way to write a log file?

I need to write text to a log file.  I'm always appending to the end of it.  I'm on an NT system.  What is the most efficient way to do this?  CFile?  CStdIoFile?  ofstream?  I'd like to write to the file possibly a few times per second, and would definitely like to flush it to disk from time to time (every 5-60 seconds).
Thanks.
0
GoWithTheFlow
Asked:
GoWithTheFlow
  • 2
1 Solution
 
jkrCommented:
As you ask for an efficiant way, i definitely recomment the Win32 file APIs ('CreateFile()', 'WriteFile()' and friends). Whilst they may seem a bit clumsy at first sight, they give you the most control about what's happening - and, every usage of CFile, CStdIoFile, ofstream or anything else will sooner or later end up at this API ... (BTW: 'flushing' is done using 'FlushFileBuffers()' - and if you use 'CreateFile()' in conjunction with 'FILE_FLAG_NO_BUFFERING', the cache is bypassed, so that it is guaranteed that there's no data loss due to caching when there's a crash...)
0
 
GoWithTheFlowAuthor Commented:
Is it more efficient to flush periodically, or to use the NO_BUFFERING flag?

I'm also wondering if I could avoid closing and reopening the file all the time. To be sure my data is safely on the disk, do I need to close & reopen the file the file? Or can I leave it open?  In other words, will the file be corrupt if the machine crashes while I have it open?
0
 
jkrCommented:
Well, it depends on what is more important for you - if application performance is more important, flushing periodically would be the way to go, but if it is data integrity (e.g. you don't want to loose any data), i'd prefer 'FILE_FLAG_NO_BUFFERING'. (BTW: 'FILE_FLAG_NO_BUFFERING' might also come in handy when you need high-performance direct I/O bypassing the file system cache, but this is an issue of I/O performance, e.g. when handling large files, not log files...)
0

Featured Post

How to Use the Help Bell

Need to boost the visibility of your question for solutions? Use the Experts Exchange Help Bell to confirm priority levels and contact subject-matter experts for question attention.  Check out this how-to article for more information.

  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now