Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 30.07.2019, 05:01
Dreammaster Dreammaster вне форума
Прохожий
 
Регистрация: 11.06.2014
Сообщения: 36
Версия Delphi: RAD Studio XE3
Репутация: 10
По умолчанию Удаление старой версии файла по его названию

Доброго времени суток. Есть код, согласно которому создается свежий файл с текущей датой в названии. Он прекрасно работает.
Но..перед созданием нужно проверить, есть ли вчерашний (позавчерашний, месячной давности и т.п.) файл и, если есть, удалить его. Пробую так, но не получается: удаляет и свежесозданный файл тоже.
Код:
var
  TD: TDateTime;
  F: textFile; 
begin
 TD:= Now;
  if  not FileExists(DateToStr(TD)) = true then //Проверка на присутствие имени с датой
    begin                                                 //если нет, то создать
      WinExec(Pchar('cmd /c del *.2019'), 1); // Сначала удалить файл с расширением *.2019
      //ShellExecute(0, 'open', 'cmd.exe', '/c del *.2019', nil, SW_HIDE);    
      AssignFile(F, datetostr(TD));  // Затем создать новый
      rewrite(F);
      writeln (F, 'Test');
      CloseFile(F);
    end
        else  begin                                     //Если есть, то дописать и ничего не удалять.
       AssignFile(F, datetostr(TD));
       Append(F, 'Test');
       CloseFile(F);
  end; 
Как реализовать задумку?

Последний раз редактировалось Dreammaster, 30.07.2019 в 05:20.
Ответить с цитированием
  #2  
Старый 30.07.2019, 23:40
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну, а ты уверен, что DateToStr тебе вернет дату с разделителем точка?
Далее. В 17 строке ошибка - нет такой коменды. Есть просто Append(F). И после нее надо отдельный wriletn. Соответсенно, делаем вывод, что ты этот код не компилил и не запускал, он просто не скомпилится...
В третьих, в этом коде логическая ошибка. Что будет при переходе через год? Последний файл года будет оставаться всегда.
В четвертых, подобный код будет работать не везде. Если программа будет установлена в Program Files, то туда запись по умолчанию запрещена (можно в манифесте попросить права администратора, но тогда винда будет каждый раз при запуске спрашивать разрешение). Писать надо в разрешенное место.
Пятое. Запуск консольного приложения из под графического - по большей части это лотерея - заработает или нет. Лучше написать свой код, который поищет файлы и удалит их. FindFirst/FindNext/FindClose/DeleteFile тебе помогут.
Шестое. Создавать файл, состоящий только из даты - не самая хорошая идея. Лучше следовать шаблону [назначение_файла/имя_программы/имя_пользователя].[дата_YYYY-MM-DD].[тип_файла/расширение]
Ну вот как-то так.

ЗЫ. По поводу получения пути для создания файлов программой, есть вот такая статейка: http://delphiprogrammingdiary.blogsp...rectories.html
Тебя, видимо, интересует CSIDL_APPDATA.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 22:04.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter