Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] FileOpenDialog - обработкой массива при выборе одного или нескольких файлов

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

Аватара для FlatX007

Ветеран


Сообщения: 553
Благодарности: 87

Профиль | Отправить PM | Цитировать


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

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

Отправлено: 13:16, 01-02-2010

 

Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


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

Код: Выделить весь код
#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

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community

Это сообщение посчитали полезным следующие участники:

Отправлено: 14:17, 01-02-2010 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Sp01LeR

Пользователь


Сообщения: 60
Благодарности: 13

Профиль | Отправить PM | Цитировать


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

Отправлено: 19:00, 01-02-2010 | #3



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] FileOpenDialog - обработкой массива при выборе одного или нескольких файлов

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[решено] FileOpenDialog с заданым видом отображения файлов cra5h_ AutoIt 2 01-02-2010 17:45
CMD/BAT - [решено] Как исключить обработку одного exe-файла из пакетной обработки нескольких файлов? Nun-Nun Скриптовые языки администрирования Windows 2 14-05-2009 12:16
Домашний сервер. Советы + помощь в выборе нескольких комплектующих aqua sky Выбор отдельных компонентов компьютера и конфигурации в целом 2 19-12-2008 18:27
Ошибка при динамической регистрации или удалении одной или нескольких записей DNS fesenus Microsoft Windows NT/2000/2003 3 19-11-2007 11:36
При загрузке нескольких конф. с одного фаил-сервера в сети - ошибка доступа ChukotMan Microsoft Windows 2000/XP 2 11-07-2006 18:39




 
Переход