Сброс FileOptions.DeleteOnDispose в FileStream возможно? - PullRequest
0 голосов
/ 03 апреля 2011

в FileStream я иногда использую функции FileOptions.DeleteOnDipose, которые автоматически, как следует из названия, удаляют файлы при вызове метода Dispose ().Что если я не решу иначе во время приложения и захочу снова убрать флаг и сохранить файл?

Так как это функция из оригинального WindowsAPI, я посмотрел там, но не смог найтирешение.

Кто-нибудь из вас знает, как сбросить флаг, если это возможно?

Спасибо, Мартин

Ответы [ 2 ]

0 голосов
/ 03 апреля 2011

Невозможно изменить флаги файла после того, как вы создали файл. Вы можете изменить только атрибуты файла. Я также взглянул на Windows API, и единственный доступный метод - SetFileAttributes, который позволяет изменять только атрибуты.

Вам следует подумать о другой логике для достижения этой цели, например, внедрить System.IO.File.Delete() самостоятельно, если вы хотите, чтобы файл был удален и не передавал FILE_FLAG_DELETE_ON_CLOSE.

Пример:

public class FileStreamEx : System.IO.FileStream
{
    private bool _deleteOnDispose = false;

    public FileStreamEx(string path, ....) : base(path, ...) { }

    public bool DeleteOnDispose
    {
        get { return _deleteOnDispose; }
        set { _deleteOnDispose = value; }
    }

    protected override void Dispose(bool disposing)
    {
        if (_deleteOnDispose)
        {
            System.IO.File.Delete(this.Name);
        }

        base.Dispose(disposing);
    }
}
0 голосов
/ 03 апреля 2011

В этом случае я бы использовал обычную утилизацию и обрабатывал удаление файла (или нет) в блоке finally. Я не знаю, как это сбросить.

...