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

Ответить
Аватара пользователя
FlatX007

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

Сообщение FlatX007 »

При выборе одного файла возвращается подобный массив.



$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



Мне нужно что бы массивы были одинаковые при выборе одного или нескольких файлов. А иначе в МОЁМ случае их очень трудно разобрать Изображение

Я вобщем набросал тут, что-то ... я правильно всё сделал ? Косяки со слешем получаются ...если файл находится в корне диска.





Код:

Код: Выделить всё

#include 
$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

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

Сообщение Creat0R »

Я использую такую функцию:





Код:

Код: Выделить всё

#include 
$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]  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
Аватара пользователя
Sp01LeR

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

Сообщение Sp01LeR »

Creat0R, я когда полгода назад похожую функцию писал для форматирования строки, то решил не использовать регулярки, но все равно без разбивки данных через массив не обошлось:





Код:

Код: Выделить всё

#include 
#include 
$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
Ответить

Вернуться в «AutoIt»