2010-04-22 4 views
4

Как я могу искать .txt-файл в любом каталоге (т. Е. C: \, d: \ и т. Д.), Используя функции файлов в PowerBuilder?Запрос Powerbuilder

+0

Вы хотите искать каталог * для * * .txt или сканировать *. txt в каталоге для конкретного контента? Один каталог или поддеревья? А какая версия PB и целевой тип? – Terry

ответ

3

Вы можете использовать элемент управления ListBox, чтобы получить список файлов/каталогов на основе заданного шаблона строки (* .txt, myfile.txt, .etc). Посмотрите на функцию DirList в справке. И вот пример из here, показывающий, как использовать элемент управления ListBox без визуального отображения его в окне.

string ls_files[] 
window lw_1 
listbox llb_1 
int li_items, li_i 

Open(lw_1) 

lw_1.openUserObject(llb_1) 

llb_1.DirList(sFileSpec, uFileType) 

li_items = llb_1.TotalItems() 

For li_i = 1 to li_items 

ls_files[ li_i ] = llb_1.Text(li_i) 

Next 

lw_1.closeUserObject(llb_1) 

Close(lw_1) 
+0

Очень обидно, что вам нужно иметь контроль над окном для работы DirList. Он добавляет лишние шаги, особенно когда я работаю с NVO. –

+0

Я считаю, что это не должно быть видно. Вы просто добавляете список в код и избавляетесь от него. –

6

Так что, если все, что вы делаете поиск файлов, вы можете сделать это с помощью listbox.DirList(), или если вы хотите сделать это, не будучи привязанным к окну или управления, вам может вызывать функции WinAPI, чтобы сделать это:

Function long FindFirstFileW (ref string filename, ref os_finddata findfiledata) library "KERNEL32.DLL" alias for "FindFirstFileW" 
Function boolean FindNextFileW (long handle, ref os_finddata findfiledata) library "KERNEL32.DLL" alias for "FindNextFileW" 

где os_finddata определяется как

unsignedlong  ul_fileattributes 
os_filedatetime  str_creationtime 
os_filedatetime  str_lastaccesstime 
os_filedatetime  str_lastwritetime 
unsignedlong  ul_filesizehigh 
unsignedlong  ul_filesizelow 
unsignedlong  ul_reserved0 
unsignedlong  ul_reserved1 
character  ch_filename[260] 
character  ch_alternatefilename[14] 

и os_filedatetime определяется как

unsignedlong  ul_lowdatetime 
unsignedlong  ul_highdatetime 

Если вы хотите примеры того, как использовать их, смотрите в ПФУ (классы PowerBuilder Foundation, доступные в CodeXchange) на объекте (pfcapsrv.pbl) pfc_n_cst_filesrvunicode.of_DirList(). (Вот где эти прототипы и структуры копируются из, BTW.)

Успехов,

Терри

Смежные вопросы