![]()  | 
	
 
  | 
		
			
  | 	
	
	
		
		|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны | 
![]()  | 
	
	
| 
		 | 
	Опции темы | Поиск в этой теме | Опции просмотра | 
| 
		 
			 
			#1  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Очень прошу помощи. 
		
	
		
		
		
		
		
		
			Тружусь над архиватором БД, он делает архивы баз и складывает их в папку. В связи с тем что база архивируется каждый день старые архивы теряют свою актуальность. Задача заключается в том чтобы раз в сутки пробегаться по папке с архивами и удалять все фалы дата создания у которых меньше DateToStr(Now -5); Помогите пожалуйста как решить проблемку. Последний раз редактировалось Dru095, 28.09.2007 в 22:27.  | 
| 
		 
			 
			#2  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 Просканировать каталог можно так (подгони этот пример под свою задачу) - http://decoding.narod.ru/faq/files/files001.html#006 
		
	
		
		
		
		
		
	
		
		
	
	
	Дату создания файла можно узнать так - http://decoding.narod.ru/faq/files/files002.html#002  | 
| 
		 
			 
			#3  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Цитата: 
	
 Спасибо за совет, справился следующим способом. //определяет размер файла function GetFileDate(FileName: string): string; var FHandle: Integer; begin FHandle := FileOpen(FileName, 0); try Result := DateToStr(FileDateToDateTime(FileGetDate(FHandle)) ); finally FileClose(FHandle); end; end; //удаляет старые архивы procedure GetAllFiles( Path: string ); var sRec: TSearchRec; isFound: boolean; begin IniFiles := TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'Setup.ini'); //указываем на ИНИ файл isFound := FindFirst( Path + '\*.rar', faAnyFile, sRec ) = 0; while isFound do begin if ( sRec.Name <> '.' ) and ( sRec.Name <> '..' ) then if ( sRec.Attr and faDirectory ) <> faDirectory then //проверка архивов на актуальность if GetFileDate(Path + '\' + sRec.Name) < DateToStr(Now - StrToInt(IniFiles.ReadString('SETUP', 'ACTUAL_BD_DAY', '6'))) then //удаление deletefile(Path + '\' + sRec.Name); isFound := FindNext( sRec ) = 0; end; FindClose( sRec ); end; вызов GetAllFiles(SetWorkArxiv_path.Text); //Выполняем функцию удаления старых архивов где SetWorkArxiv_path.Text //путь к каталогу с архивами Вопрос к спецам можно ли сделать это как то проще?  | 
| 
		 
			 
			#4  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Данный способ неправильно удаляет файлы, прошу прощения. 
		
	
		
		
		
		
		
	
		
		
	
	
	Чего делать не знаю. (Две недели уже парюсь)   В общем ситуация такая. 1. Есть каталог в нем каждый день появляются новые архивы *.rar 2. Есть setup.ini с параметром ACTUAL_BD_DAY = 3 3. Каждый день необходимо выполнять функцию удаления старых архивов оставляя архивы за последни 3 дня. (как указанно в ACTUAL_BD_DAY = 3) Как вариант решение вижу в том чтобы из текущей даты вычесть 3 дня потом пройтись по каталогу с архивами и удалить все архивы чья дата меньше текущей даты - 3 дня. Если есть знающие люди подскажите пожалуйста код. Скорее всего тут я делаю чегото неправильно if GetFileDate(Path + '\' + sRec.Name) < DateToStr(Now - StrToInt(IniFiles.ReadString('SETUP', 'ACTUAL_BD_DAY', '6'))) then Уровень знаний не позволяет решить проблему самостоятельно. Прошу помощи!!!  | 
| 
		 
			 
			#5  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 а ты пробывал архивы называть по дате ???? 
		
	
		
		
		
		
		
	
		
		
	
	
	а потом по имени файла делитить date_old:=FormatDateTime('dd_mm_yyyy', dateof(now)-3); а потом по событию например по окончанию таймера проверять совпадает ли date_old и имя файла deleteFile(dirname+'\'+date_old+'.rar') в общем с таким расширением какое используешь  | 
| 
		 
			 
			#6  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Да действительно архивы я создаю с именами в виде даты по маске  
		
	
		
		
		
		
		
	
		
		
	
	
	base_2007-11-11(00.25).rar но думаю правильнее было бы просто сканировать определенный каталог с архивами и проверять дату создания файла. Если она окажется меньше чем DateToStr(Now - StrToInt(IniFiles.ReadString('SETUP', 'ACTUAL_BD_DAY', '6') В моем исходнике есть ошибка. Дата переведена в string и осуществляется сравнение двух дат. if GetFileDate(Path + '\' + sRec.Name) < DateToStr(Now - StrToInt(IniFiles.ReadString('SETUP', 'ACTUAL_BD_DAY', '6'))) При таком сравнении удаляются не те архивы. в общем запарочка с датами скорее всего.. //Функция определяет дату создания файла function GetFileDate(FileName: string): string; var FHandle: Integer; begin FHandle := FileOpen(FileName, 0); try Result := DateToStr(FileDateToDateTime(FileGetDate(FHandle)) ); finally FileClose(FHandle); end; end; //функция удаляет старые архивы procedure GetAllFiles( Path: string ); var sRec: TSearchRec; isFound: boolean; begin IniFiles := TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'Setup.ini'); //указываем на ИНИ файл isFound := FindFirst( Path + '\*.rar', faAnyFile, sRec ) = 0; while isFound do begin if ( sRec.Name <> '.' ) and ( sRec.Name <> '..' ) then if ( sRec.Attr and faDirectory ) <> faDirectory then //проверка архивов на актуальность // Ошибка сравнения двух дат скорее всего тут.. // // GetFileDate(Path + '\' + sRec.Name) - дата создания файла // DateToStr(Now - StrToInt (IniFiles.ReadStrin('SETUP', 'ACTUAL_BD_DAY', '6')) - текущая дата минус кол во дней указанное в ini. // // // // //--------------------------------------------------------------- if GetFileDate(Path + '\' + sRec.Name) < DateToStr(Now - StrToInt (IniFiles.ReadString('SETUP', 'ACTUAL_BD_DAY', '6'))) then ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ // // // В итоге использования такого сравнения удаляются не те архивы. // // //удаление deletefile(Path + '\' + sRec.Name); isFound := FindNext( sRec ) = 0; end; FindClose( sRec ); end; Прошу помощи в исправлении ошибки.  | 
| 
		 
			 
			#7  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 а зачем для сравнения даты переводишь в строку. Сравнивай в формате TDateTime и будет тебе счастье 
		
	
		
		
		
		
		
	
		
		
	
	
	 | 
| 
		 
			 
			#8  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 if FileDateToDateTime(FileAge(Path + '\' + sRec.Name)) < (Now - IniFiles.ReadInteger('SETUP', 'ACTUAL_BD_DAY', 6)) then 
		
	
		
		
		
		
		
	
		
		
	
	
	begin Deletefile(Path + '\' + sRec.Name); //Óäàëåíèå ôàéëà Спасибо разобрался. вот код сравнения двух дат, даты файла и даты текущей - несколько дней из ИНИшника... Кому нужна помощь подскажу чем смогу по данному вопросу. УРАААААААААААа ![]()  |