|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Удаление старой версии файла по его названию
Доброго времени суток. Есть код, согласно которому создается свежий файл с текущей датой в названии. Он прекрасно работает.
Но..перед созданием нужно проверить, есть ли вчерашний (позавчерашний, месячной давности и т.п.) файл и, если есть, удалить его. Пробую так, но не получается: удаляет и свежесозданный файл тоже. Код:
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
|
|||
|
|||
Ну, а ты уверен, что DateToStr тебе вернет дату с разделителем точка?
Далее. В 17 строке ошибка - нет такой коменды. Есть просто Append(F). И после нее надо отдельный wriletn. Соответсенно, делаем вывод, что ты этот код не компилил и не запускал, он просто не скомпилится... В третьих, в этом коде логическая ошибка. Что будет при переходе через год? Последний файл года будет оставаться всегда. В четвертых, подобный код будет работать не везде. Если программа будет установлена в Program Files, то туда запись по умолчанию запрещена (можно в манифесте попросить права администратора, но тогда винда будет каждый раз при запуске спрашивать разрешение). Писать надо в разрешенное место. Пятое. Запуск консольного приложения из под графического - по большей части это лотерея - заработает или нет. Лучше написать свой код, который поищет файлы и удалит их. FindFirst/FindNext/FindClose/DeleteFile тебе помогут. Шестое. Создавать файл, состоящий только из даты - не самая хорошая идея. Лучше следовать шаблону [назначение_файла/имя_программы/имя_пользователя].[дата_YYYY-MM-DD].[тип_файла/расширение] Ну вот как-то так. ЗЫ. По поводу получения пути для создания файлов программой, есть вот такая статейка: http://delphiprogrammingdiary.blogsp...rectories.html Тебя, видимо, интересует CSIDL_APPDATA. |