PDA

Показать полную графическую версию : [решено] FileOpenDialog - обработкой массива при выборе одного или нескольких файлов


FlatX007
01-02-2010, 13:16
При выборе одного файла возвращается подобный массив.

$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

Creat0R
01-02-2010, 14:17
Я использую такую функцию:

#include <Array.au3>

$aSelected = _FileOpenDialogEx("Title", "C:\", "All (*.*)", 4, -1) ;1 для возврата строки полных путей к выбранным файлам
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) @error (http://www.autoitscript.com/autoit3/docs/macros.htm#@error) Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then) Exit (http://www.autoitscript.com/autoit3/docs/keywords.htm#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 (http://www.autoitscript.com/autoit3/docs/keywords.htm#Func) _FileOpenDialogEx($sTitle, $sInitDir, $sFilter, $iOptions=0, $iReturnMode=-1, $sDefaultName='', $hWnd=0)
Local (http://www.autoitscript.com/autoit3/docs/keywords.htm#Local) $sFOD_Ret = FileOpenDialog (http://www.autoitscript.com/autoit3/docs/functions/FileOpenDialog.htm)($sTitle, $sInitDir, $sFilter, $iOptions, $sDefaultName, $hWnd)
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) @error (http://www.autoitscript.com/autoit3/docs/macros.htm#@error) Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then) Return (http://www.autoitscript.com/autoit3/docs/keywords.htm#Return) SetError (http://www.autoitscript.com/autoit3/docs/functions/SetError.htm)(@error (http://www.autoitscript.com/autoit3/docs/macros.htm#@error), @extended (http://www.autoitscript.com/autoit3/docs/macros.htm#@extended), $sFOD_Ret)

Local (http://www.autoitscript.com/autoit3/docs/keywords.htm#Local) $sRet = ''
Local (http://www.autoitscript.com/autoit3/docs/keywords.htm#Local) $aSplit_Str = StringSplit (http://www.autoitscript.com/autoit3/docs/functions/StringSplit.htm)($sFOD_Ret, '|')

If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) @error (http://www.autoitscript.com/autoit3/docs/macros.htm#@error) Or (http://www.autoitscript.com/autoit3/docs/keywords.htm#Or) $aSplit_Str[0] < 2 Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) $iReturnMode > 0 Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then) Return (http://www.autoitscript.com/autoit3/docs/keywords.htm#Return) $sFOD_Ret
Return (http://www.autoitscript.com/autoit3/docs/keywords.htm#Return) $aSplit_Str
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)

Local (http://www.autoitscript.com/autoit3/docs/keywords.htm#Local) $sInit_Path = StringRegExpReplace (http://www.autoitscript.com/autoit3/docs/functions/StringRegExpReplace.htm)($aSplit_Str[1], '([^\\])\\*$', '\1')

For (http://www.autoitscript.com/autoit3/docs/keywords.htm#For) $i = 2 To (http://www.autoitscript.com/autoit3/docs/keywords.htm#To) $aSplit_Str[0]
$sRet &= $sInit_Path & '\' & $aSplit_Str[$i] & '|'
Next (http://www.autoitscript.com/autoit3/docs/keywords.htm#Next)

$sRet = StringRegExpReplace (http://www.autoitscript.com/autoit3/docs/functions/StringRegExpReplace.htm)($sRet, '\|+$', '')
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) $iReturnMode > 0 Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then) Return (http://www.autoitscript.com/autoit3/docs/keywords.htm#Return) $sRet

Return (http://www.autoitscript.com/autoit3/docs/keywords.htm#Return) StringSplit (http://www.autoitscript.com/autoit3/docs/functions/StringSplit.htm)($sRet, '|')
EndFunc (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndFunc)

Sp01LeR
01-02-2010, 19:00
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




© OSzone.net 2001-2012