Question

In my project I have to create some temp files in an USB device, which I want to delete on Closing. So I used a code like

this.fcommandHandler = new FileStream(TempFileName,
FileMode.CreateNew, FileAccess.ReadWrite,
FileShare.ReadWrite, 512, FileOptions.DeleteOnClose);

It works fine. But the problem is I want to use one more FileOption, like No buffering.

private const FileOptions FILE_FLAG_NO_BUFFERING = (FileOptions)0x20000000;

this.fcommandHandler = new FileStream(TempFileName,
FileMode.CreateNew, FileAccess.ReadWrite,
FileShare.ReadWrite, 512, FileOptions.DeleteOnClose & FILE_FLAG_NO_BUFFERING);

But its not deleting the File after closing. Please help.

Was it helpful?

Solution

You need to use | instead of &.

These are binary flags, and when you say &, you effectively mask them all away, resulting in no options at all.

OTHER TIPS

Use FileOptions.DeleteOnClose | FILE_FLAG_NO_BUFFERING the & cancels them out.

FILE_FLAG_NO_BUFFERING & FileOptions.DeleteOnClose returns FileOptions.None

Try including the WriteThrough flag as well in a list using the | operator. See this KB on the requirements for using FILE_FLAG_NO_BUFFERING. Its interesting that MS hasn't included this flag in the enum. Is there a reason why WriteThrough doesn't do what you need in this scenario? You are trying to write secure data?

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top