Защита от очистки Temp Windows

Модератор: Модераторы

Ответить
Аватара пользователя
Sharfik
энтузиаст
Сообщения: 838
Зарегистрирован: 20.07.2013 01:04:30

Защита от очистки Temp Windows

Сообщение Sharfik »

Для работы программы сделал распаковку файла документа во временную папку temp ОС. Все прекрасно работает, до тех пор пока ОС не уходит спать. Поскольку Windows имеет обычновение чистить свой Temp, то и папка с открытым документом чистится. Комп работает 24/7, в принципе не выключается. Уходишь домой с открытым в программе проектом, возвращаешься потом к ПК для работы, все выглядит так же. Но потом выясняется, что пропали файлы которые не открывались, но были вложены в архив распакованного документа.
Есть какой то инструмент в APi, чтобы показать ОС что файлы папки еще нужны? Даже если они не открыты в программе.

ПС: Как с этим дела под nix?
Alex2013
долгожитель
Сообщения: 3225
Зарегистрирован: 03.04.2013 11:59:44

Сообщение Alex2013 »

1 Зачем нужно ОБЯЗАТЕЛЬНО создавать файл именно в "Temp Windows" ? Чем каталог программы не угодил?
2 Насколько я помню для того чтобы сделать временный файл "нестираемым" достаточно создать в внутри Temp папки свой каталог или поставить соответствующий атрибут (системный,только чтение и т.п. ) еще можно лишить систему прав доступа к конкретному файлу или папке - но это довольно сложно сделать из программы и вообще как бы "оверкилл". )
Аватара пользователя
Sharfik
энтузиаст
Сообщения: 838
Зарегистрирован: 20.07.2013 01:04:30

Сообщение Sharfik »

Alex2013 писал(а):1 Зачем нужно ОБЯЗАТЕЛЬНО создавать файл именно в "Temp Windows" ? Чем каталог программы не угодил?

Это работоспособно только для личных ПК, на компах где пользователь ограничен в правах начинаются проблемы. Свободного доступа для записи в папку Program file нет.
Alex2013
долгожитель
Сообщения: 3225
Зарегистрирован: 03.04.2013 11:59:44

Сообщение Alex2013 »

Sharfik писал(а):Program file
:shock: А файловая система вообще закрыта? Ведь как раз для таких случаев и есть папка "Users" которая содержит (с привязкой к логину пользователя ) "не временные" и "не совсем временные" папки создаваемые программами без участия и контроля со стороны пользователя .
(Правильно использовать Application Data но это не всегда удобно )
wavebvg
постоялец
Сообщения: 355
Зарегистрирован: 28.02.2008 03:57:35

Сообщение wavebvg »

Файлы, размещённые в tmp предполагают соответствующие атрибуты и после закрытия дескриптора они могут быть удалены системой. Чтобы избежать потери файлов, нужно либо не закрывать дескрипторы, либо использовать специальный каталог AppData в профиле текущего пользователя. Всю необходимую информацию о текущей конфигурации системы можно получить из переменных окружения.
Аватара пользователя
Cheb
энтузиаст
Сообщения: 994
Зарегистрирован: 06.06.2005 15:54:34
Контактная информация:

Сообщение Cheb »

Код: Выделить всё

{$ifdef unix}
    function GetLocalAppDataDir: Utf8String;
    begin
      Result:= IncludeTrailingPathDelimiter(GetEnvironmentVariable('HOME'));
    end;
  {$endif}

  {$ifdef windows}
    function GetSpecialFolder(f: integer): Utf8String;
    var
      i: integer;
      u: UnicodeString;
    begin
      Result:= '';

      setlength(u, max_path);
      fillchar(u[1], length(u) * sizeof(unicodechar), 0);
      shgetfolderpathw(0, f, 0, shgfp_type_current, punicodechar(@u[1]));
      setlength(u, strlen(punicodechar(@u[1])));
      if u > '' then begin
        u[1]:= upcase(u[1]); // Буква диска, для красоты
        result:= includetrailingpathdelimiter(utf8encode(u));
      end;
    end;

    function GetLocalAppDataDir: utf8string;
    begin
      Result:= GetSpecialFolder(CSIDL_APPDATA);
    end;
  {$endif} 
Это папка "Application Data" пользователя, в которой программы должны хранить свой хабар. Стандарт де-юре ещё со времён Windows 2000.
И домашняя папка пользователя под линуксами.
Внутри этой папки создаёшь папку МояПрограмма под виндовс или .мояпрограмма под линукс (начинать с точки, чтобы была невидимая). И уже в ней хранишь что надо на вечные времена.
Аватара пользователя
Sharfik
энтузиаст
Сообщения: 838
Зарегистрирован: 20.07.2013 01:04:30

Сообщение Sharfik »

Я через реестр сделал чтение и поиск системных папок по тегам. Вот с линуском не работал, так что не знаю как там оно...


У Win черт ногу сломит..
AppData
-Local
-LocalLow
-Roaming

ProgramData еще есть.

И везде программы сторонние хранят свой мусор. https://g-ek.com/windows-10-papki-local ... -i-roaming
Ответить