Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] FileOpenDialog - обработкой массива при выборе одного или нескольких файлов (http://forum.oszone.net/showthread.php?t=165855)

FlatX007 01-02-2010 13:16 1335846

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


Creat0R 01-02-2010 14:17 1335895

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

Код:

#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


Sp01LeR 01-02-2010 19:00 1336158

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.

Время: 17:47.
© OSzone.net 2001-