I am trying to create a button that uses SystemDialogInput["FileOpen"] to browse for a file and assigns the file name to a variable.

For example:

 {Button["Select the file", fname = SystemDialogInput["FileOpen"]], Dynamic[fname]}

This works most of the time; however, when the file that I browse to is several nested folders away from the default directory, it does not update the value of fname.

Is there some way around this? Or is there a better function to use? I eventually would like to use this button within Manipulate.


1 Answer 1


The Method -> "Queued" option is important.

I also suggest to use current or data file directory as a starting point.

Also do not forget to check file if it is "$Canceled" (in the event of cancellation).

Here is an example just copied from one of my programs:

Button["Load", file = SystemDialogInput["FileOpen", {NotebookDirectory[] <> "data\\",
      {"Data files" -> {"*.txt"}}}];
      If[ file != "$Canceled", data = Get[file]; ], Method -> "Queued"]

Not the answer you're looking for? Browse other questions tagged or ask your own question.