Сканирование директорий ПК и сети
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
-
- Активист
- Сообщения: 127
- Зарегистрирован: 01 Декабрь 2005, 20:47
- Откуда: Минск
- Контактная информация:
Сканирование директорий ПК и сети
Привет всем!
C 63.-59 Возникла такая задача. Необходимо просканировать все диски ПК и расшаренные папки в сети и внести в файл fail.tps информацию с названием файла , атрибутами, временем создания, контрольной суммой и т.д. Причем пройтись по всем директориям, в том числе с вложенными развлетненными и т.д. Можно и нужно наверное использовать DIRECTORY (получить список файлов в каталоге), но как организовать прохождение и обработку не только текущей директории , а и вложенных, в которых может быть также подмножество директорий и так до корня. Может быть кто решал подобную задачу, подскажите куда рулить, или есть ли подобные шаблоны и решения.
С уважением, Stalker.
C 63.-59 Возникла такая задача. Необходимо просканировать все диски ПК и расшаренные папки в сети и внести в файл fail.tps информацию с названием файла , атрибутами, временем создания, контрольной суммой и т.д. Причем пройтись по всем директориям, в том числе с вложенными развлетненными и т.д. Можно и нужно наверное использовать DIRECTORY (получить список файлов в каталоге), но как организовать прохождение и обработку не только текущей директории , а и вложенных, в которых может быть также подмножество директорий и так до корня. Может быть кто решал подобную задачу, подскажите куда рулить, или есть ли подобные шаблоны и решения.
С уважением, Stalker.
Специализация - программы для образования, делопроизводство, складской учет
Re: Сканирование директорий ПК и сети
Вот нечто. У меня работает
Перебирает все до конца
tqLF это queue как в Directory Чуть добавли свои поля
tqLF QUEUE,TYPE
Name STRING(FILE:MAXFILENAME) !FILE:MAXFILENAME is an EQUATE
ShortName STRING(13)
Date LONG
Time LONG
Size LONG
Attrib BYTE !A bitmap, the same as the attributes EQUATEs
recs long
szFullName cstring(255)
flag long
END
Перебирает все до конца
tqLF это queue как в Directory Чуть добавли свои поля
tqLF QUEUE,TYPE
Name STRING(FILE:MAXFILENAME) !FILE:MAXFILENAME is an EQUATE
ShortName STRING(13)
Date LONG
Time LONG
Size LONG
Attrib BYTE !A bitmap, the same as the attributes EQUATEs
recs long
szFullName cstring(255)
flag long
END
Код: Выделить всё
tcIO.mLoadDir function(tqLF pqLF, *cstring p_Path, *cstring p_Mask, long p_SkipSubDir = 0)
Que Queue
str cstring(61)
.
loc:Sep cstring('|')
code
self.mStrToQue(p_Mask, Que, loc:Sep, 0)
return(self.mLoadDirQ(pqLF, p_Path, Que, p_SkipSubDir))
tcIO.mLoadDirQ function(tqLF pqLF, *cstring p_Path, Queue p_Que, long p_SkipSubDir = 0)
loc:i long
loc:szPath cstring(255)
loc:szNewPath cstring(255)
loc:j long
qLF queue(tqLF).
loc:Flag long
loc:Mask cstring(64)
pAny Any
code
loc:Flag = pqLF.Flag
pAny &= what(p_Que,1)
!Сначала все поддиректории
loc:szPath = p_Path & '*.*'
directory(qLF, loc:szPath, ff_:directory )
loop loc:i = 1 to records(qLF)
get(qLF, loc:i)
if clip(qLF.ShortName) = '..'
cycle.
if clip(qLF.ShortName) = '.'
cycle.
if band(qLF.Attrib, ff_:DIRECTORY)
!Message(p_Path&'|'&qLF.Name,'Dir')
if p_SkipSubDir = 0
loc:szNewPath = p_Path & clip(qLF.Name) & '\'
self.mLoadDirQ(pqLF, loc:szNewPath, p_Que)
.
.
.
if ~records(p_Que)
loc:Mask = '*.*'
do RunIt
else
loop loc:j = 1 to records(p_Que)
get(p_Que, loc:j)
loc:Mask = pAny
do RunIt
.
.
return(1)
RunIt routine
free(qLF)
loc:szPath = p_Path & loc:Mask
!Message(loc:szPath)
directory(qLF, loc:szPath, ff_:NORMAL + ff_:READONLY + ff_:ARCHIVE)
loop loc:i = 1 to records(qLF)
get(qLF, loc:i)
if clip(qLF.ShortName) = '..'
cycle.
if clip(qLF.ShortName) = '.'
cycle.
if band(qLF.Attrib, ff_:DIRECTORY)
else
pqLF = qLF
pqLF.szFullName = p_Path & clip(qLF.Name)
pqLF.recs = 0
pqLF.Flag = loc:flag
add(pqLF)
.
.
tcIO.mStrToQue function(*cstring p_Str, Queue p_Que, *cstring p_Sep, long p_Flag)
pAny Any
loc:len ulong
loc:pos ulong
loc:currpos ulong
loc:str cstring(2048)
loc:SepLen long
!loc:m equate(500)
!loc:mx long
code
if ~p_Flag
free(p_Que)
clear(p_Que)
.
pAny &= what(p_Que,1)
loc:len = len(clip(p_Str))
loc:currpos = 1
!Message(loc:Len)
loc:SepLen = len(p_Sep)
loop
loc:pos = instring(p_Sep,p_str,1,loc:currpos)
if ~loc:pos
break.
loc:Str = p_Str[loc:currpos : loc:pos - 1]&'<0>'
loc:currpos = loc:pos + loc:Seplen
do add_que
.
if loc:currpos < loc:len
loc:Str = p_Str[loc:currpos : loc:len]&'<0>'
do add_que
.
return(0)
Add_que routine
loc:str = clip(loc:str)
if len(loc:str)
pAny = loc:str
add(p_que)
else
clear(p_que)
add(p_que)
.
-
- Активист
- Сообщения: 127
- Зарегистрирован: 01 Декабрь 2005, 20:47
- Откуда: Минск
- Контактная информация:
Re: Сканирование директорий ПК и сети
Спасибо ! За помощь.
Проверю как пойдет. С уважением Stalker
Проверю как пойдет. С уважением Stalker
Специализация - программы для образования, делопроизводство, складской учет
-
- Активист
- Сообщения: 127
- Зарегистрирован: 01 Декабрь 2005, 20:47
- Откуда: Минск
- Контактная информация:
Re: Сканирование директорий ПК и сети
Здравствуйте!
Попробовал собрать пример, что-то не пошло. Не могу собрать приложение. Если есть законченное приложение или что либо вроде шаблона, если не трудно вышлите на мыло stalker.mil@tut.by, либо инструкции как собрать приложение из предложенного листинга. Заранее благодарен, с уважением Stalker.
Попробовал собрать пример, что-то не пошло. Не могу собрать приложение. Если есть законченное приложение или что либо вроде шаблона, если не трудно вышлите на мыло stalker.mil@tut.by, либо инструкции как собрать приложение из предложенного листинга. Заранее благодарен, с уважением Stalker.
Специализация - программы для образования, делопроизводство, складской учет
- Admin
- Администратор
- Сообщения: 3959
- Зарегистрирован: 05 Июль 2005, 15:59
- Откуда: Хабаровск
- Благодарил (а): 25 раз
- Поблагодарили: 22 раза
- Контактная информация:
Re: Сканирование директорий ПК и сети
И Все то за вас делать
Вот готовый пример на основе предыдущего кода.
Вот готовый пример на основе предыдущего кода.
Код: Выделить всё
PROGRAM
MAP
END
tqLF QUEUE,TYPE
Name STRING(FILE:MAXFILENAME) !FILE:MAXFILENAME is an EQUATE
ShortName STRING(13)
Date LONG
Time LONG
Size LONG
Attrib BYTE !A bitmap, the same as the attributes EQUATEs
recs long
szFullName cstring(255)
flag long
END
tcIO CLASS,TYPE
mLoadDir function(tqLF pqLF, *cstring p_Path, *cstring p_Mask, long p_SkipSubDir = 0),byte,proc
mLoadDirQ function(tqLF pqLF, *cstring p_Path, Queue p_Que, long p_SkipSubDir = 0),byte,proc
mStrToQue function(*cstring p_Str, Queue p_Que, *cstring p_Sep, long p_Flag),byte,proc
END
QQ tqLF
YY tcIO
Path CSTRING(200)
Mask CSTRING(200)
Window WINDOW('Dirlist'),AT(,,359,261),FONT('Tahoma',8,,FONT:regular,CHARSET:CYRILLIC),CENTER,GRAY,DOUBLE
LIST,AT(2,3,355,256),USE(?List1),VSCROLL,FORMAT('39L(2)|M~szFullName~@s255@#8#'),FROM(QQ)
END
CODE
OPEN(Window)
Path = 'c:\Clarion6\'
Mask = '*.tps|*.bmp'
YY.mLoadDir(QQ,Path,Mask)
ACCEPT
END
CLOSE(Window)
tcIO.mLoadDir function(tqLF pqLF, *cstring p_Path, *cstring p_Mask, long p_SkipSubDir = 0)
Que Queue
str cstring(61)
.
loc:Sep cstring('|')
code
self.mStrToQue(p_Mask, Que, loc:Sep, 0)
return(self.mLoadDirQ(pqLF, p_Path, Que, p_SkipSubDir))
tcIO.mLoadDirQ function(tqLF pqLF, *cstring p_Path, Queue p_Que, long p_SkipSubDir = 0)
loc:i long
loc:szPath cstring(255)
loc:szNewPath cstring(255)
loc:j long
qLF queue(tqLF).
loc:Flag long
loc:Mask cstring(64)
pAny Any
code
loc:Flag = pqLF.Flag
pAny &= what(p_Que,1)
!Сначала все поддиректории
loc:szPath = p_Path & '*.*'
directory(qLF, loc:szPath, ff_:directory )
loop loc:i = 1 to records(qLF)
get(qLF, loc:i)
if clip(qLF.ShortName) = '..'
cycle.
if clip(qLF.ShortName) = '.'
cycle.
if band(qLF.Attrib, ff_:DIRECTORY)
!Message(p_Path&'|'&qLF.Name,'Dir')
if p_SkipSubDir = 0
loc:szNewPath = p_Path & clip(qLF.Name) & '\'
self.mLoadDirQ(pqLF, loc:szNewPath, p_Que)
.
.
.
if ~records(p_Que)
loc:Mask = '*.*'
do RunIt
else
loop loc:j = 1 to records(p_Que)
get(p_Que, loc:j)
loc:Mask = pAny
do RunIt
.
.
return(1)
RunIt routine
free(qLF)
loc:szPath = p_Path & loc:Mask
!Message(loc:szPath)
directory(qLF, loc:szPath, ff_:NORMAL + ff_:READONLY + ff_:ARCHIVE)
loop loc:i = 1 to records(qLF)
get(qLF, loc:i)
if clip(qLF.ShortName) = '..'
cycle.
if clip(qLF.ShortName) = '.'
cycle.
if band(qLF.Attrib, ff_:DIRECTORY)
else
pqLF = qLF
pqLF.szFullName = p_Path & clip(qLF.Name)
pqLF.recs = 0
pqLF.Flag = loc:flag
add(pqLF)
.
.
tcIO.mStrToQue function(*cstring p_Str, Queue p_Que, *cstring p_Sep, long p_Flag)
pAny Any
loc:len ulong
loc:pos ulong
loc:currpos ulong
loc:str cstring(2048)
loc:SepLen long
!loc:m equate(500)
!loc:mx long
code
if ~p_Flag
free(p_Que)
clear(p_Que)
.
pAny &= what(p_Que,1)
loc:len = len(clip(p_Str))
loc:currpos = 1
!Message(loc:Len)
loc:SepLen = len(p_Sep)
loop
loc:pos = instring(p_Sep,p_str,1,loc:currpos)
if ~loc:pos
break.
loc:Str = p_Str[loc:currpos : loc:pos - 1]&'<0>'
loc:currpos = loc:pos + loc:Seplen
do add_que
.
if loc:currpos < loc:len
loc:Str = p_Str[loc:currpos : loc:len]&'<0>'
do add_que
.
return(0)
Add_que routine
loc:str = clip(loc:str)
if len(loc:str)
pAny = loc:str
add(p_que)
else
clear(p_que)
add(p_que)
.
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
- Admin
- Администратор
- Сообщения: 3959
- Зарегистрирован: 05 Июль 2005, 15:59
- Откуда: Хабаровск
- Благодарил (а): 25 раз
- Поблагодарили: 22 раза
- Контактная информация:
Re: Сканирование директорий ПК и сети
Только там поля многие из очереди не заполняются. Тут уж надеюсь разберетесь.
Нет - пишите.
Удачи
Нет - пишите.
Удачи
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
-
- Активист
- Сообщения: 127
- Зарегистрирован: 01 Декабрь 2005, 20:47
- Откуда: Минск
- Контактная информация:
Re: Сканирование директорий ПК и сети
Здравствуйте Admin!
Все получилось, в остальном разберусь,большое Вам спасибо за помощь. Работал в основном с шаблонами, поэтому и возникла проблема.С уважением Stalker.
Все получилось, в остальном разберусь,большое Вам спасибо за помощь. Работал в основном с шаблонами, поэтому и возникла проблема.С уважением Stalker.
Специализация - программы для образования, делопроизводство, складской учет