Jasper Jasper - 27 days ago 5
C# Question

Can I launch DotNet's OpenFileDialog in C:\Users\Public\Documents?

Is there a way to launch the

OpenFileDialog
in the
C:\Users\Public\Documents
folder?


I am writing a C# application, using the DotNet framework. I am trying to launch an
OpenFileDialog
, with an
InitialDirectory
of
"C:\\Users\\Public\\Documents\\"
and a
FileName
of
"world.txt"
. Unfortunately, the
OpenFileDialog
is putting me in the
Documents
shortcut instead of into
C:\Users\Public\Documents
.

Expected results

I expect to see the OpenFileDialog open, with the top textbox showing
> This PC > Windows7_OS (C:) > Users > Public > Documents
and the bottom textbox showing
world.txt
. I expect that if I click in the top textbox, it will show
C:\Users\Public\Documents
.

Actual results

The OpenFileDialog opens. The top textbox shows
> This PC > Documents
and the bottom textbox shows
world.txt
. If I click in the top textbox, it shows
Documents
. The displayed folder contents are not the same as the contents of
C:\Users\Public\Documents
.

Things I have tried

I have stopped the code in the Visual Studio debugger after the following line of code:

OpenFileDialog dlg = new OpenFileDialog();


In the Immediate Window, I have executed code such as the following:

dlg.FileName = "world.txt"
? dlg.FileName
dlg.InitialDirectory = "C:\\NonExistentDirectory\\";
dlg.ShowDialog();
dlg.InitialDirectory = "C:\\";
dlg.ShowDialog();
dlg.InitialDirectory = "C:\\Users\\";
dlg.ShowDialog();
dlg.InitialDirectory = "C:\\Users\\Public\\";
dlg.ShowDialog();
dlg.InitialDirectory = "C:\\Users\\Public\\Documents\\";
dlg.ShowDialog();


I cancel out of each dialog.

I used
C:\WINDOWS\System32\cmd.exe
to
cd
between
C:\
and
C:\Users\
and
C:\Users\Public
and
C:\Users\Public\Documents\
.

Results of things I have tried


  • When
    dlg.InitialDirectory = "C:\\NonExistentDirectory\\"
    , the dialog's folder initially displays as
    This PC > Documents > Visual Studio 2015 > Projects > SimpleGame > Controller > bin > Debug"
    . Clicking in the textbox causes it to display
    C:\Users\Owner\Documents\Visual Studio 2015\Projects\SimpleGame\Controller\bin\Debug
    . I therefore assume that
    OpenFileDialog
    silently handles an invalid
    InitialDirectory
    by not changing directories. In this case, it is defaulting to my project's assembly's bin's
    Debug
    folder.

  • When
    dlg.InitialDirectory
    is
    "C:\\"
    or
    "C:\\Users\\"
    or
    "C:\\Users\\Public\\"
    the dialog behaves as expected. Clicking in the top textbox produces
    C:\
    or
    C:\Users
    or
    C:\Users\Public
    respectively.

  • When
    dlg.InitialDirectory = "C:\\Users\\Public\\Documents\\"
    the dialog behaves incorrectly. The top textbox shows
    > This PC > Documents
    and the bottom textbox shows
    world.txt
    . If I click in the top textbox, it shows
    Documents
    . The displayed folder contents are not the same as the contents of
    C:\Users\Public\Documents
    .

  • Using
    cmd.exe
    lets me
    cd
    between the folders as expected, including into
    C:\Users\Public\Documents
    .



My environment

I am running Microsoft Visual Studio Community 2015 Version 14.0.23107.0 D14REL, using Microsoft Visual C# 2015. My operating system is Windows 10 Pro.

Answer

It seems that it is impossible!

You can see in the following link that it is a bug in .net framework :( msdn link you can find in the last comment:

It is hard to believe but:

It is a bug and nothing else.