Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Поиск файла по маске на диске / 20 сообщений из 20, страница 1 из 1
24.10.2008, 14:10
    #35614556
sefem
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск файла по маске на диске
Необходимо просканировать диск и занести в список все пути на которых лежат файлы указанные в маске *.xls
...
Рейтинг: 0 / 0
24.10.2008, 14:54
    #35614721
spas2001
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск файла по маске на диске
Посмотрите в примерах, приспособьте для себя рекурсивные функции
-----------------------------------------------------------------------------
Главная деталь любой машины - голова ее владельца
...
Рейтинг: 0 / 0
24.10.2008, 14:57
    #35614733
VanoR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск файла по маске на диске
DirList PowerScript function
а дальше смекалка подскажет
...
Рейтинг: 0 / 0
24.10.2008, 16:42
    #35615103
Локшин Марк
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск файла по маске на диске
sefemНеобходимо просканировать диск и занести в список все пути на которых лежат файлы указанные в маске *.xls
Тынц. Не забываем пользоваться CloseHandle(...) для закрытияпоследовательности поиска.
...
Рейтинг: 0 / 0
26.10.2008, 12:29
    #35616518
Riska
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск файла по маске на диске
Функции, которые нужны:
Код: plaintext
1.
uf_get_tree_files
uf_get_tree_folders
...
Рейтинг: 0 / 0
29.10.2008, 14:58
    #35623118
KOLCHOZ_POSTEVENT
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск файла по маске на диске
Досовская комманда , функция run ,например.
Код: plaintext
1.
 dir d:\*.xls /b/s >d:\xls_path.txt
Дальше importfile в data window
...
Рейтинг: 0 / 0
29.10.2008, 15:54
    #35623294
spas2001
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск файла по маске на диске
KOLCHOZ_POSTEVENTДосовская комманда , функция run ,например.
Код: plaintext
1.
 dir d:\*.xls /b/s >d:\xls_path.txt
Дальше importfile в data window

Это неспортивно)
...
Рейтинг: 0 / 0
29.10.2008, 16:24
    #35623427
KOLCHOZ_POSTEVENT
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск файла по маске на диске
Встречаются два американских нищих.
Один другому говорит:
-Ты слышал, наш коллега Чарли нашёл работу!
-А я всегда знал, что за деньги он способен на всё.

Говорить в этом клубе работающих за деньги о каких-то нормах, просто наивно.
...
Рейтинг: 0 / 0
30.10.2008, 09:50
    #35624650
Riska
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск файла по маске на диске
KOLCHOZ_POSTEVENTДосовская комманда , функция run ,например.
Код: plaintext
1.
 dir d:\*.xls /b/s >d:\xls_path.txt
Дальше importfile в data window
Можно примерчик, а то у меня что-то не получается. Например, мне нужно получить все пасы "*.xls" из "C:\"
...
Рейтинг: 0 / 0
30.10.2008, 12:59
    #35625300
spas2001
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск файла по маске на диске
KOLCHOZ_POSTEVENT
Говорить в этом клубе работающих за деньги о каких-то нормах, просто наивно.

Шутки тоже надо понимать:)
...
Рейтинг: 0 / 0
30.10.2008, 13:54
    #35625481
Estets
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск файла по маске на диске
RiskaKOLCHOZ_POSTEVENTДосовская комманда , функция run ,например.
Код: plaintext
1.
 dir d:\*.xls /b/s >d:\xls_path.txt
Дальше importfile в data window
Можно примерчик, а то у меня что-то не получается. Например, мне нужно получить все пасы "*.xls" из "C:\"
Шутка?
Или что не получается?

Код: plaintext
1.
2.
3.
wsh = CREATE OleObject 
li_ret = wsh.ConnectToNewObject( "WScript.Shell" ) 
li_ret = wsh.Run("dir c:\*.xls /b/s >c:\xls_path.txt",  1 , TRUE) 
dw_1.ImportFile("c:\xls_path.txt")

где dw_1 - DW с одним полем строкой?
...
Рейтинг: 0 / 0
30.10.2008, 17:44
    #35626251
Riska
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск файла по маске на диске
Estets
Шутка?
Или что не получается?

Код: plaintext
1.
2.
3.
wsh = CREATE OleObject 
li_ret = wsh.ConnectToNewObject( "WScript.Shell" ) 
li_ret = wsh.Run("dir c:\*.xls /b/s >c:\xls_path.txt",  1 , TRUE) 
dw_1.ImportFile("c:\xls_path.txt")

где dw_1 - DW с одним полем строкой?
Такими вещами не шутят! Валится на этой строке:
Код: plaintext
li_ret = wsh.Run("dir c:\*.xls /b/s >c:\xls_path.txt",  1 , TRUE) 
li_ret = -1

Error: Error calling external object function run at line 6 in clicked event of object cb_1 of www
...
Рейтинг: 0 / 0
31.10.2008, 15:48
    #35628376
Estets
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск файла по маске на диске
Riska
...
Такими вещами не шутят! Валится на этой строке:
Код: plaintext
li_ret = wsh.Run("dir c:\*.xls /b/s >c:\xls_path.txt",  1 , TRUE) 
li_ret = -1

Error: Error calling external object function run at line 6 in clicked event of object cb_1 of www

А поискать по форуму пару минут и заменить комманду на

Код: plaintext
li_ret = wsh.Run("cmd /c dir c:\*.xls /b/s >c:\xls_path.txt",  1 , TRUE) 

Честно говоря для меня китайская грамота, но работает ;)
...
Рейтинг: 0 / 0
31.10.2008, 15:58
    #35628425
Estets
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск файла по маске на диске
P.S.
либо попытаться использовать ShellExecute

/topic/63553&hl=ShellExecute#452502
...
Рейтинг: 0 / 0
31.10.2008, 18:13
    #35629038
Поиск файла по маске на диске
Когда-то давно, было дело, баловались...
...
Рейтинг: 0 / 0
01.11.2008, 09:31
    #35629718
Локшин Марк
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск файла по маске на диске
Чего вы тут какой-то балаган развели? Необходимую ссылку я уже дал. Методы с запуском внешних программ - сродни чесать правой пяткой левое ухо.
...
Рейтинг: 0 / 0
01.11.2008, 14:13
    #35630498
18-я весна
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск файла по маске на диске
Локшин МаркЧего вы тут какой-то балаган развели? Необходимую ссылку я уже дал. Методы с запуском внешних программ - сродни чесать правой пяткой левое ухо.
+1

Приведу пример из своего старого проекта
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
public function integer of_listdir (readonly string as_root, ref string as_dirs[], ref string as_files[]);
n_cst_kernel32 k32
n_cst_kernel32`win32_find_dataa finddata

String ls_dirs[], ls_files[]
long h
Long li_f =  0 , li_d =  0 
as_dirs[] = ls_dirs[]
as_files[] = ls_files[]

h = k32.FindFirstFile(as_root, finddata)
If h <=  0  Then Return - 1  
Do
	If finddata.cfilename = "." or finddata.cfilename = ".." Then Continue
	If of_GetBit(finddata.dwfileattributes,  4 ) =  1  Then
		li_d ++
		as_dirs[li_d] = finddata.cfilename
	Else
		li_f ++
		as_files[li_f] = finddata.cfilename
	End IF
Loop While k32.FindNextFile(h, finddata)
k32.FindClose(h)
Return  1 
end function
public function integer of_getbit (ulong al_number, integer ai_bit);
Return Mod(Truncate(al_number/( 2 ^ai_bit),  0 ),  2 )
end function

type win32_find_dataa from structure
	unsignedlong		dwfileattributes
	filetime		ftcreationtime
	filetime		ftlastaccesstime
	filetime		ftlastwritetime
	unsignedlong		nfilesizehigh
	unsignedlong		nfilesizelow
	unsignedlong		dwreserved0
	unsignedlong		dwreserved1
	character		cfilename[ 260 ]
	character		calternatefilename[ 14 ]
end type

А дальше, написать рекурсивную ф-ю, вызывающую эту начиная с корневой папки.
Например такая ф-я создает дерево меню на основе структуры папок и находящихся в них файлах с определенным расширением
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
public function integer of_builduserregistrymenu (readonly string as_rootdir, ref menu am_menu);m_registry_item m
menu m_sub 
am_menu = Create menu

n_util u
String ls_dirs[], ls_files[]
Long li_i, li_in, li_dirs =  0 , li_files =  0 
If u.of_ListDir(as_rootdir + "\*.*", ls_dirs[], ls_files[]) >  0  Then
	li_in = UpperBound(ls_dirs[])
	For li_i =  1  To li_in
		If of_BuildUserRegistryMenu(as_rootdir + "\" + ls_dirs[li_i],m_sub ) >  0  Then
			li_dirs ++
			am_menu.item[li_dirs] = m_sub//.item[ 1 ]
			am_menu.item[li_dirs].Text = ls_dirs[li_i]
			
		End IF
	Next
	li_in = UpperBound(ls_files[])
	If li_dirs>  0  and li_in >  0  Then
		m_sub = Create menu
		li_dirs ++
		am_menu.item[li_dirs] = m_sub//.item[ 1 ].item[ 1 ]
		m_sub.Text = "-"
	End IF
	li_files = li_dirs
	For li_i =  1  To li_in
		If Lower(Right(ls_files[li_i],  4 )) = ".rgd" Then
			li_files ++
			m = Create m_registry_item
			am_menu.item[li_files] = m.item[ 1 ].item[ 1 ]
			am_menu.item[li_files].Text = Left(ls_files[li_i], Len(ls_files[li_i]) -  4 )
			am_menu.item[li_files].Tag = as_rootdir + "\" +ls_files[li_i] 
		End IF
	Next
End IF

If li_files >  0  Then
	Return  1 
Else
	Return - 1 
End IF

end function

В случае с исходной задачей, в рекурсивную ф-ю нужно кроме начальной папки передавать массив строк по ссылке, куда складывать все найденные файлы
...
Рейтинг: 0 / 0
02.11.2008, 08:31
    #35631359
Riska
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск файла по маске на диске
Estets,
Код: plaintext
li_ret = wsh.Run("cmd /c dir c:\*.xls /b/s >c:\xls_path.txt",  1 , TRUE)
Работает! Есть возможность убрать мерзкое черное окошко? На форуме это уже обсуждалось, но ответа так никто и не дал.
...
Рейтинг: 0 / 0
02.11.2008, 12:23
    #35631441
KOLCHOZ_POSTEVENT
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск файла по маске на диске
Чёй-то я,старый лопух,недопонимаю.
Отчего это RUN у вас,господа,говорит от имени какого-то объекта.
Речь-то идёт,всего,о двух строках кода:
Код: plaintext
1.
2.
Run("cmd /c dir c:\*.xls /b/s >c:\xls_path.txt")
dw.importfile('c:\xls_path.txt')
А чёрное окошко совсем не мерзкое, а очень даже истетичное.
Для подтверждения прилагаю...
...
Рейтинг: 0 / 0
02.11.2008, 12:30
    #35631444
KOLCHOZ_POSTEVENT
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск файла по маске на диске
О блин,вот доверился вам ископировал с какого-то поста.
Уберите cmd,плиз
Код: plaintext
1.
2.
Run("dir c:\*.xls /b/s >c:\xls_path.txt")
dw.importfile('c:\xls_path.txt')
Если RUN закапризничает, сделайте из PB bat файл, и запустите его при помощи того же RUN-это уже ударит наверняка.
...
Рейтинг: 0 / 0
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Поиск файла по маске на диске / 20 сообщений из 20, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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