Re: CreateFile() and FILE_FLAG_WRITE_THROUGH
- From: Tim Roberts <timr@xxxxxxxxx>
- Date: Wed, 10 Sep 2008 21:41:56 -0700
"Nick Tucker" <nick.tucker@xxxxxxxxxxxxxxxxx> wrote:
If I create a file using CreateFile(), specifying the
FILE_FLAG_WRITE_THROUGH flag, then write to that file, the file still shows
as zero bytes long in the directory and in Windows Explorer, and if I then
turn the power off, that file is still zero bytes long on restart, so the
data I wrote is unavailable. I have tried this test on a variety of
operating systems including Vista, XP and Windows Server 2003/2008 using a
variety of hardware platforms with both SATA and SCSI disk systems, and they
all behave the same way.
Surely the whole point of specifying that flag is that I want the data to be
written to disk, together with it's corresponding metadata, so if a
catastrophic failure occurs, the data is available to me on restart.
"...together with it's corresponding metadata" is wishful thinking on your
part. Such a promise never hinted at in the documentation. If you had,
for example, created a file with 4096 empty bytes and closed it, then
opened the file with FILE_FLAG_WRITE_THROUGH and done a Write, you'd see
that the data went straight to disk.
My researches of newsgroup articles on this subject suggest that if I want
this, then I also have to use FlushFileBuffers(), but if that is so then
surely I don't need to specify the write through flag since all file and
folder data will be committed to disk when I call that function.
Right.
So, what is the point of specifying the write-through flag in this scenario?
Writing metadata is expensive. There are many cases where you want the
data to be written immediately without having to pay the penalty for a
metadata update any time. When you're ready to pay the penalty, you use
FlushFileBuffers.
Also see http://support.microsoft.com/kb/99794
I think the documentation of CreateFile() could do with a little
clarification!
I'm not sure I agree, but there links at the bottom of the MSDN page that
allow you to add your own content, and to submit comments to Microsoft.
--
Tim Roberts, timr@xxxxxxxxx
Providenza & Boekelheide, Inc.
.
- Follow-Ups:
- Re: CreateFile() and FILE_FLAG_WRITE_THROUGH
- From: Nick Tucker
- Re: CreateFile() and FILE_FLAG_WRITE_THROUGH
- References:
- CreateFile() and FILE_FLAG_WRITE_THROUGH
- From: Nick Tucker
- CreateFile() and FILE_FLAG_WRITE_THROUGH
- Prev by Date: Re: CreateFile() and FILE_FLAG_WRITE_THROUGH
- Next by Date: Re: CreateFile() and FILE_FLAG_WRITE_THROUGH
- Previous by thread: Re: CreateFile() and FILE_FLAG_WRITE_THROUGH
- Next by thread: Re: CreateFile() and FILE_FLAG_WRITE_THROUGH
- Index(es):
Relevant Pages
|