FileStream с опцией DeleteOnClose File - PullRequest
       16

FileStream с опцией DeleteOnClose File

8 голосов
/ 18 сентября 2009

В моем проекте мне нужно создать временные файлы на USB-устройстве, которые я хочу удалить при закрытии. Поэтому я использовал код вроде

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

Работает нормально. Но проблема в том, что я хочу использовать еще один FileOption, например, без буферизации.

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);

Но файл не удаляется после закрытия. Пожалуйста, помогите.

Ответы [ 3 ]

9 голосов
/ 18 сентября 2009

Вам нужно использовать | вместо &.

Это двоичные флаги, и когда вы говорите &, вы эффективно маскируете их все, в результате чего вариантов нет вообще.

2 голосов
/ 18 сентября 2009

Использование FileOptions.DeleteOnClose | FILE_FLAG_NO_BUFFERING & отменяет их.

FILE_FLAG_NO_BUFFERING & FileOptions.DeleteOnClose возврат FileOptions.None

0 голосов
/ 18 сентября 2009

Попробуйте включить флаг WriteThrough в список, используя | оператор. См. KB о требованиях к использованию FILE_FLAG_NO_BUFFERING. Интересно, что MS не включил этот флаг в перечисление. Есть ли причина, по которой WriteThrough не делает то, что вам нужно в этом сценарии? Вы пытаетесь записать защищенные данные?

...