Just lock the first byte of the file. When the application is finish writing it release the lock. The application that reads just wait until the lock on the first byte is gone. That still leaves a small window between the time the creator of the files creates it and apply the lock, but the size would be 0 and the reader should detect that.
Other solution is to have the writer create a second file to indicated the first fire is finish writing.
Or even better use real notification with pulses or messages.