powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Удалить папки
15 сообщений из 15, страница 1 из 1
Удалить папки
    #37999638
-tim-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет всем !
Помогите пожалуйста! При выходе из моей программы, программа создает резервную копию базы данных в каталоге "C:\Rez_Copy\16102012" (16102012 - это число, месяц, год). В результате работая каждый день, в папке "C:\Rez_Copy\" находятся много папок. Как мне программно удалить все лишние папки, оставив 3 последние папки?
Спасибо за ваше время!
...
Рейтинг: 0 / 0
Удалить папки
    #37999650
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ADIR() - получает список подпапок
...
Рейтинг: 0 / 0
Удалить папки
    #37999662
-tim-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не могу разобраться, что я делаю не так?

CLEAR
pat_kat = sys(5)+sys(2003)+"\Rez_copy\"
gnDbcnumber = ADIR(pat_kat)

FOR nCount = 1 TO gnDbcnumber
? gaDatabase(nCount,1)
ENDFOR
...
Рейтинг: 0 / 0
Удалить папки
    #37999693
alextashk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-tim-,

VFP Вам же черным по белому пишет:

pat_kat не массив
Код: plaintext
1.
2.
pat_kat = sys(5)+sys(2003)+"\Rez_copy\*"
gnDbcnumber = ADIR(gaDatabase, pat_kat)
...
Рейтинг: 0 / 0
Удалить папки
    #37999699
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Читай хэлп на ADIR()
там пример есть.
В третьем параметре надо "D" чтоб папки увидеть.
...
Рейтинг: 0 / 0
Удалить папки
    #37999707
-tim-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Но почему = 0 ?
gnDbcnumber = 0
...
Рейтинг: 0 / 0
Удалить папки
    #37999720
-tim-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем спасибо!
...
Рейтинг: 0 / 0
Удалить папки
    #38000262
-tim-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет всем !
Помогите пожалуйста! При выходе из моей программы, программа создает резервную копию базы данных в каталоге "C:\RAB_VFP\ZARP_NET\Rez_Copy\16102012" (16102012 - это число, месяц, год). В результате работая каждый день, в папке "C:\RAB_VFP\ZARP_NET\Rez_Copy" находятся много папок. Как мне программно удалить все лишние папки, оставив 3 последние папки?

CLEAR
pat_kat = sys(5)+sys(2003)+"\Rez_copy\*"
gnDbcnumber = ADIR(gaDatabase, pat_kat, "D")

FOR nCount = 1 TO gnDbcnumber && цикл по количеству папок
? gaDatabase(nCount,1) && отображаются имена папок
IF nCount >= 3
aa1 = sys(5)+sys(2003)+"\Rez_copy\" + gaDatabase(nCount,1)
kommand="RMDIR "+ALLTRIM(aa1)
! &kommand && Удалить папку, но удаление не происходит, подскажите почему
ENDIF
ENDFOR

Может у вас есть другие примеры, прошу помогите!
Спасибо за ваше время!
...
Рейтинг: 0 / 0
Удалить папки
    #38000330
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Папка удаляется только если в ней пусто. Если там подпапок нет, то так:
Код: sql
1.
2.
3.
4.
5.
...
aa1 = sys(5)+sys(2003)+"\Rez_copy\" + gaDatabase(nCount,1)
delete file (addbs(aa1) + '*.*')
rmdir (aa1)
...


только такой проверкой "IF nCount >= 3" ты оставишь какие-то 2 папки, и не факт что последние.
...
Рейтинг: 0 / 0
Удалить папки
    #38000366
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TПапка удаляется только если в ней пусто.а если не пусто, то в поиск по "scripting.filesystemobject"
...
Рейтинг: 0 / 0
Удалить папки
    #38000403
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglirа если не пусто, то в поиск по "scripting.filesystemobject"
ADIR() c рекурсией еще есть
...
Рейтинг: 0 / 0
Удалить папки
    #38000475
-tim-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А как определить, что последние, или как их построить по порядку?
...
Рейтинг: 0 / 0
Удалить папки
    #38000492
Jonny540
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-tim-А как определить, что последние, или как их построить по порядку?
ADIR()Заносит в массив информацию о файлах и возвращает количество файлов.

Синтаксис

ADIR(ArrayName [, cFileSkeleton [, cAttribute [, cCreatorType]]])

Параметры

ArrayName

Задает имя массива. Если задано имя несуществующего массива, Visual FoxPro автоматически создает такой массив. Если задано имя существующего массива, который не в состоянии вместить всю информацию, Visual FoxPro автоматически увеличивает размер массива надлежащим образом. Если в массиве больше элементов, чем необходимо, Visual FoxPro его укорачивает. Если массив уже существует и функция ADIR( ) возвращает 0, не найдя соответствующих файлов, то массив не изменяется. Если массив не существует и функция ADIR( ) возвращает 0, то массив не создается.
В следующей таблице описано содержимое каждого столбца массива и тип данных столбца:

Столбец Содержимое массива Тип данных
1 Имена файлов Символьный
2 Размеры файлов Числовой
3 Даты создания файлов Дата
4 Время создания файлов Символьный

5 Атрибуты файлов Символьный
Последний столбец массива содержит атрибуты соответствующих файлов. Каждый атрибут файла обозначается буквой, причем файл может иметь несколько атрибутов. В следующей таблице показано, какие атрибуты представляют те или иные буквы:

Буква Атрибут
A Архивный - чтение/запись (отсутствует в FoxPro для Macintosh)
H Скрытый
R Только для чтения
S Системный
D Каталог
cFileSkeleton

Задает шаблон имен файлов, определяющий некую группу файлов, информацию о которых вы намерены сохранить. Возможны, например, следующие критерии: все табличные файлы, все текстовые файлы, все файлы с именами, содержащими букву A в качестве первой буквы, и т.д. В подобных случаях в шаблоне cFileSkeleton часто используются символы подстановки * и ?. Вопросительный знак обозначает одиночный символ, а звездочка ѕ любое количество символов. В шаблоне можно использовать любое число символов подстановки в любых позициях.
В Visual FoxPro, FoxPro для Windows и FoxPro для MS-DOS можно задать диск и/или каталог, где будет вестись поиск нужных файлов. Если диск и каталог не заданы, информация о файлах текущего каталога помещается в массив.

В FoxPro для Macintosh можно задать том и/или каталог, в котором будет вестись поиск нужных файлов. Если том и каталог не заданы, FoxPro для Macintosh помещает информацию о файлах текущего каталога в массив.

cAttribute

Указывает тип файлов, о которых нужно собрать информацию: подкаталоги, скрытые или системные файлы или имя тома.
Можно задать любую комбинацию букв D, H и S. Если задана буква D, то помимо имен файлов, отвечающих шаблону cFileSkeleton, будут возвращены имена подкаталогов текущего каталога. Если задана буква H, возвращается информация о скрытых файлах, соответствующих шаблону cFileSkeleton. Если задана буква S, будет возвращена информация о системных файлах, соответствующих шаблону cFileSkeleton.
Если в качестве cFileSkeleton задана пустая строка, будут возвращены только имена подкаталогов, информация о скрытых файлах или о системных файлах.

В числе атрибутов cAttribute можно указать букву V, чтобы получить имя тома текущего диска. Если буква V задана вместе с D, H или S, в массив возвращается только имя тома. Оно сохраняется в первом элементе массива, остальная часть массива отсекается.

cCreatorType
Допустим только в FoxPro для Macintosh.

Результат

Числовой

Комментарии

Для каждого файла функция ADIR( ) заносит в массив его имя, размер, дату и время создания и атрибуты.
...
Рейтинг: 0 / 0
Удалить папки
    #38000509
-tim-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, я все понял!
...
Рейтинг: 0 / 0
Удалить папки
    #38000510
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-tim-А как определить, что последние, или как их построить по порядку?
Если бы у тебя имя папки было в виде ГГГГММДД, т.е. 20121016, то так
Код: sql
1.
2.
3.
4.
5.
6.
pat_kat = sys(5)+sys(2003)+"\Rez_copy\*"
gnDbcnumber = ADIR(gaDatabase, pat_kat, "D")
asort(gaDatabase)
FOR nCount = 1 TO gnDbcnumber-3 && цикл по количеству папок
   ? gaDatabase(nCount,1) && отображаются имена папок
ENDFOR


Если память не изменяет - там в массиве еще папки "." и ".." тогда не -3, а -5

Если как у тебя 16102012, то записывать все в курсор, преобразовывать в дату, сортировать, потом удалять кроме 3-х последних.
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Удалить папки
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]