Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / FoxPro, Visual FoxPro Новый топик    Ответить
 adir захлебнулся  [new]
DMITRY_PEREDISTY
Member

Откуда: Москва
Сообщений: 152
При большом количестве файлов, adir захлебывается и не может создать массив. Мне нужен список имен файлов в каталоге. FVP7 что делать?
13 янв 05, 17:51    [1243260]     Ответить | Цитировать Сообщить модератору
 Re: adir захлебнулся  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7864
Используй другие способы чтения списка файлов. Например:

http://kodu.neti.ee/~juri4/vfpplus/vbs_fso_05_ru.htm#Files

Или переходи на VFP9. Там есть возможность увеличить максимальное количество элементов массива свыше 65500.
13 янв 05, 18:48    [1243489]     Ответить | Цитировать Сообщить модератору
 Re: adir захлебнулся  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7864
Да, есть еще несколько команд, которые посылает список файлов в текстовый файл. Потом делай разбор этого текстового файла.

DIR
DISPLAY FILES
LIST FILES
13 янв 05, 18:53    [1243504]     Ответить | Цитировать Сообщить модератору
 Re: adir захлебнулся  [new]
Urri
Member

Откуда: Москва
Сообщений: 2693
А еще можно adir делать не по маске '*.*', а по более жесткой маске. Представим, например, для конкретики, что имена файлов образованы функцией dtos(SomeDate). Ну и строить массив не по всем файлам, а только относящимся к определенному месяцу. Например, задавая маску '200501*.*'

А еще можно периодически архивировать устаревающие файлы на архивные носители и затирать их из оперативного каталога.

А еще можно создать двухуровневую структуру каталогов, например, складывая файлы не в корень каталога, а в подкаталоги, например, по датам.
13 янв 05, 22:57    [1243738]     Ответить | Цитировать Сообщить модератору
 Re: adir захлебнулся  [new]
Cyrus
Member

Откуда:
Сообщений: 72
#DEFINE FILE_ATTRIBUTE_DIRECTORY  16
#DEFINE INVALID_HANDLE_VALUE      -1

DECLARE integer FindClose IN WIN32API integer
DECLARE integer FindFirstFile IN WIN32API string @, string @
DECLARE integer FindNextFile IN WIN32API integer, string @
LOCAL lcBuffer, lcDir, lcFileName
lcBuffer = SPACE(318)
lcDir = GETDIR()
IF !EMPTY(lcDir)
	hFile = FindFirstFile(ADDBS(lcDir)+'*.*', @lcBuffer)
	IF hFile <> INVALID_HANDLE_VALUE 
		CREATE CURSOR filez (filename C(240) UNIQUE)
		DO WHILE .T.
			IF BITAND(buf2dword(LEFT(lcBuffer, 4)), FILE_ATTRIBUTE_DIRECTORY) <> ;
FILE_ATTRIBUTE_DIRECTORY
				lcFileName = SUBSTR(lcBuffer, 45, 260)
				lcFilename = LEFT(lcFileName, AT(CHR(0), lcFileName) - 1) 
				INSERT INTO filez (filename) VALUES (lcFileName)
			ENDIF 
			IF FindNextFile (hFile, @lcBuffer) = 0
				EXIT 
			ENDIF 
		ENDDO 
		=FindClose(hFile)
		SET ORDER TO filename
		GO TOP 
		BROWSE 
	ENDIF 
ENDIF 
CLEAR DLLS 
USE 

 
FUNCTION  buf2dword (lcBuffer)
RETURN Asc(SUBSTR(lcBuffer, 1,1)) +;
    Asc(SUBSTR(lcBuffer, 2,1)) * 256 +;
    Asc(SUBSTR(lcBuffer, 3,1)) * 65536 +;
    Asc(SUBSTR(lcBuffer, 4,1)) * 16777216 
14 янв 05, 01:44    [1243832]     Ответить | Цитировать Сообщить модератору
 Re: adir захлебнулся  [new]
DMITRY_PEREDISTY
Member

Откуда: Москва
Сообщений: 152
Спасибо разбираюсь, а пока разберусь, сделал обязательную чистку в начале.
14 янв 05, 13:06    [1244931]     Ответить | Цитировать Сообщить модератору
Все форумы / FoxPro, Visual FoxPro Ответить