rootx

FileOpenDialog multiple files path ? [SOLVED]

5 posts in this topic

#1 ·  Posted (edited)

Why if I select only one file the array doesn't return the path?? And 4 multiple files return the row PATH? There is a mode to have in the same case signle or multiple selection the path included in the file name? THX

#include <Array.au3>
#include <File.au3>

Local $spFile

$mFile = FileOpenDialog("apri", @ScriptDir & "", "Images (*.iso)", 1 + 4 )
If @error Then
    ConsoleWrite("error")
Else
    $spFile = StringSplit($mFile, "|")
EndIf

_ArrayDisplay($spFile)

 

Edited by rootx

Share this post


Link to post
Share on other sites



@rootx when you specify single file, FileOpenDialog returns a String of full path. When you select multiple files option it returns an array, 0 index is path and the rest are filenames. If you want full path for all files, either loop through the array and concatenate the 0 index to the file name, or (easier) just use _FileListToArray and choose the $bReturnPath = True option.


When you're dead, you don't know you're dead - it's only difficult for those that know you. It's the same way when you're stupid...

My Scripts: SCCM UDFInclude Source with Compiled Script, Windows Firewall UDF

Share this post


Link to post
Share on other sites

@jguinch I didn't see the need to go into exactly how it creates the array, don't know that knowing it does a stringsplit helps him any. But yes, you are correct.


When you're dead, you don't know you're dead - it's only difficult for those that know you. It's the same way when you're stupid...

My Scripts: SCCM UDFInclude Source with Compiled Script, Windows Firewall UDF

Share this post


Link to post
Share on other sites

My solution....

#include <Array.au3>
#include <File.au3>

Local $spFile

$mFile = FileOpenDialog("apri", @ScriptDir & "", "Images (*.iso)", 1 + 4 )
If @error Then
    ConsoleWrite("error")
Else
    $spFile = StringSplit($mFile, "|")
     If UBound($spFile) = 2 Then
         MsgBox("","","one file")
         ConsoleWrite($spFile[1]&@CRLF)
     Else
         MsgBox("","","more than two files")
         $path = $spFile[1]
         _ArrayDelete($spFile, 0)
         _ArrayDelete($spFile, 0)
         For $x = 0 to UBound($spFile)-1
             ConsoleWrite($path&$spFile[$x]&@CRLF)
         Next
    EndIf
EndIf

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now

  • Similar Content

    • Slym
      FileOpenDialog is slow to return
      By Slym
      Hi there,
      There is something weird with FileSaveDialog. It takes approximately 8 seconds on my computer to return after clicking on OK.
      When compiling this exact code it looks faster but I still have this slow behaviour on another compiled software (LinuxLive USB Creator).
      $DEBUG_TIMER=TimerInit() $source_file = FileOpenDialog("Please choose an ISO image of LinuxLive CD", "", "ISO / IMG / ZIP (*.iso;*.img;*.zip)", 1,"") ConsoleWrite("It took "&Round(TimerDiff($DEBUG_TIMER)/1000,1)&" seconds to select ISO") Do you know what could cause this ?
      Thank you for your help
       
      PS : I'm still looking for AutoIT devs to help me on LinuxLive USB Creator. If interested, please contact me.
    • AlexChernavsky
      Problem with selecting a file through FileOpenDialog
      By AlexChernavsky
      I'm having a strange issue with using FileOpenDialog to select a file. Everything works fine the first time you select a file. But if you change your mind (while the program is still running) and want to select a different file, nothing changes. The program is "stuck" with the first selection you made, and nothing you do will change that selection in the input box.

      I pulled the function below out of my program, and I had to modify it a bit to make it run on its own. But it's basically the same as the original.

      To see the problem in action, click on either of the two buttons that say, "Choose other file...". Select any file from the list. Click on the "Open" button. So far, so good. Now, repeat the process again. See? The original file you selected is still listed in the input box.

      I'm stumped by this one.

      Thanks in advance.

      -- Alex Chernavsky in Rochester, NY


      #include <GUIConstantsEx.au3> #include <ButtonConstants.au3> #include <EditConstants.au3> _ConfirmParametersWithUser("test.txt", "test2.txt", 16, 1000, 3000, "InputFile", "WriteToFile", "Testing") Func _ConfirmParametersWithUser($sInputFileName, $sOutputFileName, $iNumberOfProblems, $iMinTime, $iMaxTime, $sSourceOfProblems, $sOutputType, $sCondition) Local $hSetParametersForm ; Handle to GUI Local $hRadio1 Local $hRadio2 Local $hRadio3 Local $hRadio4 Local $hInputFileName Local $hChooseInputFile Local $hOutputFileName Local $hChooseOutputFile Local $hTrialsPerSession Local $hTime1 Local $hTime2 Local $hCondition Local $hExitButton Local $hHelpButton Local $hContinueButton Local $nMsg Local $sTemp $sInputFileName = @ScriptDir & "\" & $sInputFileName $sOutputFileName = @ScriptDir & "\" & $sOutputFileName $hSetParametersForm = GUICreate("Reaction Time Program: Set Parameters", 580, 578, -1, -1) GUICtrlCreateLabel("Reaction Time Program", 175, 3, 205, 23) GUICtrlSetFont(-1, 14, 400, 0, "MS Sans Serif") GUICtrlCreateLabel("Based on work by Seth Roberts", 200, 29, 155, 15) GUICtrlSetFont(-1, 8, 400, 0, "MS Sans Serif") ;GUICtrlSetBkColor(-1, 0xCCFFCC) ; Give it a green background to make it easier to position it (it's a temporary thing to help design the GUI) GUICtrlCreateGroup("Source of arithmetic problems: ", 40, 50, 528, 105) GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif") GUIStartGroup() $hRadio1 = GUICtrlCreateRadio("Use problems included with source code", 64, 80, 257, 17) GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif") If $sSourceOfProblems = "SourceCode" Then GUICtrlSetState(-1, $GUI_CHECKED) EndIf $hRadio2 = GUICtrlCreateRadio("Read problems from input file: ", 64, 104, 280, 17) GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif") If $sSourceOfProblems = "InputFile" Then GUICtrlSetState(-1, $GUI_CHECKED) EndIf $hInputFileName = GUICtrlCreateInput($sInputFileName & " ", 81, 124, 380, 20) GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif") GUICtrlSetState($hInputFileName, $GUI_FOCUS) Send("{end}") ; This line and the one before it are necessary to right-align the text (useful in case of long path names, so that the left part gets cut off, not the right part) $hChooseInputFile = GUICtrlCreateButton("Choose other file...", 465, 121) If $sSourceOfProblems = "InputFile" Then GUICtrlSetState($hChooseInputFile, $GUI_ENABLE) Else GUICtrlSetState($hChooseInputFile, $GUI_DISABLE) EndIf GUICtrlCreateLabel("Number of trials (problems) presented per testing session:", 48, 167, 345, 20) GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif") $hTrialsPerSession = GUICtrlCreateInput($iNumberOfProblems, 397, 165, 30, 22, BitOR($GUI_SS_DEFAULT_INPUT, $ES_NUMBER)) GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif") GUICtrlCreateGroup("Random delay between trials (in milliseconds): ", 40, 198, 349, 89) GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif") GUICtrlCreateLabel("Minimum delay:", 64, 224, 97, 20) GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif") GUICtrlCreateLabel("Maximum delay :", 64, 256, 104, 20) GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif") $hTime1 = GUICtrlCreateInput($iMinTime, 176, 224, 41, 21, BitOR($GUI_SS_DEFAULT_INPUT, $ES_NUMBER)) $hTime2 = GUICtrlCreateInput($iMaxTime, 176, 256, 41, 21, BitOR($GUI_SS_DEFAULT_INPUT, $ES_NUMBER)) GUICtrlCreateGroup("Upon completion of the testing session: ", 40, 296, 528, 110) GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif") $hRadio3 = GUICtrlCreateRadio("Display summary and append data to output file: ", 64, 325, 422, 17) If $sOutputType = "WriteToFile" Then GUICtrlSetState(-1, $GUI_CHECKED) GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif") $hOutputFileName = GUICtrlCreateInput($sOutputFileName & " ", 81, 350, 380, 20) GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif") GUICtrlSetState($hOutputFileName, $GUI_FOCUS) Send("{end}") ; This line and the one before it are necessary to right-align the text (useful in case of long path names, so that the left part gets cut off, not the right part) $hChooseOutputFile = GUICtrlCreateButton("Choose other file...", 465, 347) If $sOutputType = "WriteToFile" Then GUICtrlSetState($hChooseOutputFile, $GUI_ENABLE) Else GUICtrlSetState($hChooseOutputFile, $GUI_DISABLE) EndIf $hRadio4 = GUICtrlCreateRadio("Display summary but do not write data to output file", 64, 379, 320, 17) GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif") If $sOutputType = "DisplayOnly" Then GUICtrlSetState(-1, $GUI_CHECKED) GUICtrlCreateGroup("Please describe the condition for this test:", 40, 417, 520, 90) GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif") $hCondition = GUICtrlCreateInput("", 54, 447, 500, 20) GUICtrlCreateLabel("Example: ""45 mins. after taking 3 tablespoons of flaxseed oil""", 56, 477, 550, 28) GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif") $hHelpButton = GUICtrlCreateButton("Help", 272, 534, 75, 25) $hContinueButton = GUICtrlCreateButton("Continue", 382, 534, 75, 25, $BS_DEFPUSHBUTTON) $hExitButton = GUICtrlCreateButton("Exit Program", 488, 534, 75, 25) GUICtrlSetState($hCondition, $GUI_FOCUS) ; Set the focus to the "Condition" input box GUISetState(@SW_SHOW) While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $hRadio1 GUICtrlSetState($hChooseInputFile, $GUI_DISABLE) Case $hRadio2 GUICtrlSetState($hChooseInputFile, $GUI_ENABLE) Case $hRadio3 GUICtrlSetState($hChooseOutputFile, $GUI_ENABLE) Case $hRadio4 GUICtrlSetState($hChooseOutputFile, $GUI_DISABLE) Case $hChooseInputFile $sTemp = FileOpenDialog("Choose input file", @ScriptDir & "\", "All files (*.*)", 1 + 2) If $sTemp Then $sInputFileName = $sTemp $hInputFileName = GUICtrlSetData($hInputFileName, $sInputFileName & " ") EndIf GUICtrlSetState($hCondition, $GUI_FOCUS) ; Return focus to the "Continue" button Case $hChooseOutputFile $sTemp = FileOpenDialog("Choose output file", @ScriptDir & "\", "All files (*.*)", 2 + 8) If $sTemp Then $sOutputFileName = $sTemp $hOutputFileName = GUICtrlSetData($hOutputFileName, $sOutputFileName & " ") EndIf GUICtrlSetState($hCondition, $GUI_FOCUS) ; Return focus to the "Continue" button Case $hHelpButton ShellExecute("http://www.astrocyte-design.com/reaction-time/index.html") Case $hContinueButton ExitLoop Case $hExitButton Exit EndSwitch WEnd If (BitAND(GUICtrlRead($hRadio1), $GUI_CHECKED) = $GUI_CHECKED) Then $sSourceOfProblems = "SourceCode" Else $sSourceOfProblems = "InputFile" EndIf $iNumberOfProblems = GUICtrlRead($hTrialsPerSession) $iMinTime = GUICtrlRead($hTime1) $iMaxTime = GUICtrlRead($hTime2) If (BitAND(GUICtrlRead($hRadio3), $GUI_CHECKED) = $GUI_CHECKED) Then $sOutputType = "WriteToFile" Else $sOutputType = "DisplayOnly" EndIf $sCondition = GUICtrlRead($hCondition) $sCondition = StringReplace($sCondition, ",", "") ; Remove any commas that the user happens to enter (they interfere with the CSV file format) GUIDelete($hSetParametersForm) EndFunc ;==>_ConfirmParametersWithUser
    • johnmcloud
      FileOpenDialog - Exclude extension?
      By johnmcloud
      Hi guys i have a question,
      Can i exclude a extension from FileOpenDialog? Example i want to include all file ( *.*) except txt ( *.txt )

      My solution for now is:

      $Exstension = StringRegExpReplace(@WorkingDir & "Test.txt", "^.*.", "") If $Exstension = "txt" Then MsgBox(0,0,"Error") Return EndIf
      But i like to make it unselectable in FileOpenDialog like the classic filter, but in an opposite way.
      Is possible?
      Thanks
    • blademonkey
      FileopenDialog() InitDir Behavior Question
      By blademonkey
      Greetings,

      wow, it's been a while since i've posted in here (4+ years). it's good to be back and to see that AutoIt is going on strong.

      Here's the behavior i'm trying to understand.

      background: I have a specific Autoit application that invokes a fileopendialog. The initdir parameter is set to @scriptdir.

      When running a single instance of the application, the fileopendialog behaves as expected. The fileopendialog window opens and the folder location is correctly set to the @scriptdir location (of that instance).

      When running a second or third instance (where the exes themselves are located in a different location), the fileopendialog sets the initdir to one of the first two initdir (aka @scriptdir) locations.

      this is a little frustating, and im not sure how to control this behavior, since i dont exactly know when and where @scriptdir is technically fetching its information.

      I've tried assigning the @scriptdir setting to a user defined variable @curfolder in the begining of my script, which works well in scite, but not when compiled. I have several theories (one is that multiple instances somehow share the same variables/PID) but would like to get confirmation on what is driving this behavior.

      I've also tried using @scriptfullpath.

      Any help is appreciated. hopefully i've described the situation well enough, let me know if have not.