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

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

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

Шутки тоже надо понимать:)
...
Рейтинг: 0 / 0
Поиск файла по маске на диске
    #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
Поиск файла по маске на диске
    #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
Поиск файла по маске на диске
    #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
Поиск файла по маске на диске
    #35628425
Estets
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
P.S.
либо попытаться использовать ShellExecute

/topic/63553&hl=ShellExecute#452502
...
Рейтинг: 0 / 0
Поиск файла по маске на диске
    #35629038
Когда-то давно, было дело, баловались...
...
Рейтинг: 0 / 0
Поиск файла по маске на диске
    #35629718
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чего вы тут какой-то балаган развели? Необходимую ссылку я уже дал. Методы с запуском внешних программ - сродни чесать правой пяткой левое ухо.
...
Рейтинг: 0 / 0
Поиск файла по маске на диске
    #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
Поиск файла по маске на диске
    #35631359
Фотография Riska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Estets,
Код: plaintext
li_ret = wsh.Run("cmd /c dir c:\*.xls /b/s >c:\xls_path.txt",  1 , TRUE)
Работает! Есть возможность убрать мерзкое черное окошко? На форуме это уже обсуждалось, но ответа так никто и не дал.
...
Рейтинг: 0 / 0
Поиск файла по маске на диске
    #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
Поиск файла по маске на диске
    #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
20 сообщений из 20, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Поиск файла по маске на диске
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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