-
AutoIt
(
http://forum.oszone.net/forumdisplay.php?f=103)
FileOpenDialog - обработкой массива при выборе одного или нескольких файлов
При выборе одного файла возвращается подобный массив.
$aArray[0] - 1
$aArray[1] - C:\Program Files\7-Zip\7zFM.exe
При выборе двух и более файлов возвращается подобный массив.
$aArray[0] - 3
$aArray[1] - C:\Program Files\7-Zip
$aArray[2] - 7zCon.sfx
$aArray[3] - 7zFM.exe
Мне нужно что бы массивы были одинаковые при выборе одного или нескольких файлов. А иначе в МОЁМ случае их очень трудно разобрать :dont-know
Я вобщем набросал тут, что-то ... я правильно всё сделал ? Косяки со слешем получаются ...если файл находится в корне диска.
Код:
#include <Array.au3>
$sMultiOpenFiles = FileOpenDialog("", @WindowsDir & "\", "File (*.*)", 1 + 4 + 8 + 16)
If Not (@error) Then
$aMultiOpenFiles = StringSplit($sMultiOpenFiles, "|", @CRLF)
If UBound($aMultiOpenFiles) - 1 = 1 Then
$aSplitFileName = StringSplit($aMultiOpenFiles[1], "\")
$iIndex = UBound($aSplitFileName) - 1
$aA = StringTrimRight($aMultiOpenFiles[1], StringLen($aSplitFileName[$iIndex]))
If StringRight($aA, 1) = '\' Then $aA = StringTrimRight($aA, 1)
Dim $aDuble[2] = [$aMultiOpenFiles[0] ,$aA]
Dim $aMultiOpenFiles[3] = [$aDuble[0], $aDuble[1], $aSplitFileName[$iIndex]]
EndIf
_ArrayDisplay($aMultiOpenFiles)
EndIf
|
Я использую такую функцию:
Код:
#include <Array.au3>
$aSelected = _FileOpenDialogEx("Title", "C:\", "All (*.*)", 4, -1) ;1 для возврата строки полных путей к выбранным файлам
If @error Then Exit
;ConsoleWrite($aSelected & @CRLF)
_ArrayDisplay($aSelected)
;$iReturnMode = -1 (default) - Return array of selected files
;$iReturnMode = 1 (default) - Return string of selected files (all files returned as full file pathes)
Func _FileOpenDialogEx($sTitle, $sInitDir, $sFilter, $iOptions=0, $iReturnMode=-1, $sDefaultName='', $hWnd=0)
Local $sFOD_Ret = FileOpenDialog($sTitle, $sInitDir, $sFilter, $iOptions, $sDefaultName, $hWnd)
If @error Then Return SetError(@error, @extended, $sFOD_Ret)
Local $sRet = ''
Local $aSplit_Str = StringSplit($sFOD_Ret, '|')
If @error Or $aSplit_Str[0] < 2 Then
If $iReturnMode > 0 Then Return $sFOD_Ret
Return $aSplit_Str
EndIf
Local $sInit_Path = StringRegExpReplace($aSplit_Str[1], '([^\\])\\*$', '\1')
For $i = 2 To $aSplit_Str[0]
$sRet &= $sInit_Path & '\' & $aSplit_Str[$i] & '|'
Next
$sRet = StringRegExpReplace($sRet, '\|+$', '')
If $iReturnMode > 0 Then Return $sRet
Return StringSplit($sRet, '|')
EndFunc
|
Creat0R, я когда полгода назад похожую функцию писал для форматирования строки, то решил не использовать регулярки, но все равно без разбивки данных через массив не обошлось:
Код:
#include <String.au3>
#include <Array.au3>
$add_fullpath_str=_FopenDlgStr(@WindowsDir & "\", "Все файлы (*.*)", 5)
MsgBox(4096,"Info:",$add_fullpath_str)
Func _FopenDlgStr($inpath, $infilter, $inparam)
Local $open_dlg=FileOpenDialog("Open:", $inpath, $infilter, $inparam)
If @error Then
MsgBox(16,"Error:","Не выбрано ни одного файла!")
Return 0
Else
$expdir_arr=_StringExplode($open_dlg, "|", 1)
$expdir_arr[0]=$expdir_arr[0]&"\"
If UBound($expdir_arr) > 1 Then
$begin_dir_add=$expdir_arr[0]&$expdir_arr[1]
$result_str=StringReplace($begin_dir_add, "|", "|"&$expdir_arr[0])
Else
$result_str=$open_dlg
EndIf
Return $result_str
EndIf
EndFunc
|
Время: 17:47.
© OSzone.net 2001-