none
InitialDirectoryプロパティについて RRS feed

  • 質問

  • OpenFileDialogを使用しています。
    プログラムを起動し、最初はInitialDirectoryに指定したパスが開きます。

    エラー処理を行い
    InitialDirectoryプロパティをプログラム起動時のパスに書き換えます。
    しかし、開かれるパスは最初に指定したパスが開かれます。

    何か、考慮するポイントがありますか?

    2010年4月8日 2:52

回答

  • >OpenFileDialog1.InitialDirectory = DefaultFile

    OpenFileDialog1.InitialDirectory = DefaultFile
    Environment.CurrentDirectory = DefaultFile

    としてください。

    http://msdn.microsoft.com/ja-jp/library/system.environment.currentdirectory(VS.80).aspx

     


    えムナウ@わんくま同盟 Microsoft MVP Visual Studio C# Since 2005/01-2010/12
    • 回答としてマーク 菊地俊介 2010年4月27日 1:55
    2010年4月14日 9:40
  • CurrentDirectory は関係ないと思います。

    たんに、
    "C:\Documents and Settings\All Users\デスクトップ\プログラム"
    が存在しなかったり、アクセスできなかったりして、設定が無視されたんだと思います。

    たとえば、
    Dim DefaultFile As String = "C:\"
    とされると機能しますよね?

    # ずいぶん前の話ですけど。

    • 回答としてマーク 菊地俊介 2010年4月27日 1:55
    2010年4月16日 4:26
  • OS によって結果が異なるようでした。
    FileName プロパティにディレクトリが含まれると、以下のように OS によって動作が異なりました。
    KindGood さんの環境は Windows XP なのですね?

    ・Windows XP の場合:
    InitialDirectory ではなく FileName のフォルダが開かれ、ファイル名欄には FileName のファイル名部分のみが表示される。

    ・Windows Vista および Windows 7 の場合:
    InitialDirectory のフォルダが開かれ、ファイル名欄には FileName の値がそのまま(パス付で)表示される。

    そこで、XP 環境への対策として、
    OpenFileDialog1.InitialDirectory = DefaultFile
    に加え、
    OpenFileDialog1.FileName = ""
    (もしくは OpenFileDialog1.FileName = Path.GetFileName(OpenFileDialog1.FileName))
    を行うと、InitialDirectory が機能するようになりました。

    お試しください。

    # 前の返信の際、「存在しなかったり、アクセスできなかったりして」と書きましたが、KindGood さんの返信を読み返すと、その可能性がないことは明白でしたね。失礼しました。

    • 回答としてマーク 菊地俊介 2010年4月27日 1:54
    2010年4月20日 10:21
  • XP環境で確認しました。

    OpenFileDialog1.InitialDirectory = DefaultFile
    OpenFileDialog1.FileName = ""

    としてください。


    えムナウ@わんくま同盟 Microsoft MVP Visual Studio C# Since 2005/01-2010/12
    • 回答としてマーク 菊地俊介 2010年4月27日 1:54
    2010年4月21日 10:07

すべての返信

  • どのようなコードを書かれているのでしょうか? 通常はそのような動作になりません。起動時のパスが再設定されているようなことはありませんか?


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/
    2010年4月8日 8:19
    モデレータ
  • コードは、下記になります。
        Private Sub sansyouB_Click(ByVal sender As System.Object, _
                                    ByVal e As System.EventArgs) Handles sansyouB.Click

           If OpenFileDialog1.ShowDialog() = DialogResult.OK Then
       Dim SelectFile As String = OpenFileDialog1.FileName
       '      ^^^^^^
       Textbox1.Text = SelectFile
                '×noの場合
            Else
                Exit Sub
            End If
        End Sub
       
        Private Sub YarinaoshiB_Click(ByVal sender As System.Object, _
                                    ByVal e As System.EventArgs) Handles YarinaoshiB.Click
            Dim DefaultFile As String = "C:\Documents and Settings\All Users\デスクトップ\プログラム"
            OpenFileDialog1.InitialDirectory = DefaultFile
            Textbox1.Text = "ファイルを選択してください"
        End Sub

    質問の仕方が間違っていました。
    「sansyouB」をクリックすると
    C:\Documents and Settings\All Users\デスクトップ\プログラム
    が、開きます。

    「YarinaoshiB」をクリックしプログラムを実行します。
    この時点で、
    開くファイル:C:\Documents and Settings\All Users\デスクトップ\プログラム
    「textbox1」の値:ファイルを選択してください
    となると思っていましたが、

    再び、「sansyouB」をクリックすると
    印の部分の「SelectFile」が開きます。
    「textbox1」の値は「ファイルを選択してください」となっています。

    動作としては
    C:\Documents and Settings\All Users\デスクトップ\プログラム
    にしたいです。

    宜しくお願い致します。

    2010年4月9日 7:30
  • >OpenFileDialog1.InitialDirectory = DefaultFile

    OpenFileDialog1.InitialDirectory = DefaultFile
    Environment.CurrentDirectory = DefaultFile

    としてください。

    http://msdn.microsoft.com/ja-jp/library/system.environment.currentdirectory(VS.80).aspx

     


    えムナウ@わんくま同盟 Microsoft MVP Visual Studio C# Since 2005/01-2010/12
    • 回答としてマーク 菊地俊介 2010年4月27日 1:55
    2010年4月14日 9:40
  • CurrentDirectory は関係ないと思います。

    たんに、
    "C:\Documents and Settings\All Users\デスクトップ\プログラム"
    が存在しなかったり、アクセスできなかったりして、設定が無視されたんだと思います。

    たとえば、
    Dim DefaultFile As String = "C:\"
    とされると機能しますよね?

    # ずいぶん前の話ですけど。

    • 回答としてマーク 菊地俊介 2010年4月27日 1:55
    2010年4月16日 4:26
  • えムナウさん
    ご回答ありがとうございます。
    Environment.CurrentDirectory = DefaultFile
    プログラムのCurrentDirectoryは変更したくありません。
    この1行を追加しても思うような動作にはなりませんでした。
    宜しくお願い致します。
    2010年4月20日 6:34
  • TH01さん
    ご回答ありがとうございます。
    Dim DefaultFile As String = "C:\"
    と試してみましたが、
    MessageBoxでひょうじすると
    "C:\"とC:\Documents and Settings\All Users\デスクトップ\プログラム
    の両方、それぞれ正しく表示されましたが、実際の動作は思うように
    なりませんでした。
    宜しくお願い致します。
    2010年4月20日 6:35
  • OS によって結果が異なるようでした。
    FileName プロパティにディレクトリが含まれると、以下のように OS によって動作が異なりました。
    KindGood さんの環境は Windows XP なのですね?

    ・Windows XP の場合:
    InitialDirectory ではなく FileName のフォルダが開かれ、ファイル名欄には FileName のファイル名部分のみが表示される。

    ・Windows Vista および Windows 7 の場合:
    InitialDirectory のフォルダが開かれ、ファイル名欄には FileName の値がそのまま(パス付で)表示される。

    そこで、XP 環境への対策として、
    OpenFileDialog1.InitialDirectory = DefaultFile
    に加え、
    OpenFileDialog1.FileName = ""
    (もしくは OpenFileDialog1.FileName = Path.GetFileName(OpenFileDialog1.FileName))
    を行うと、InitialDirectory が機能するようになりました。

    お試しください。

    # 前の返信の際、「存在しなかったり、アクセスできなかったりして」と書きましたが、KindGood さんの返信を読み返すと、その可能性がないことは明白でしたね。失礼しました。

    • 回答としてマーク 菊地俊介 2010年4月27日 1:54
    2010年4月20日 10:21
  • >この1行を追加しても思うような動作にはなりませんでした。
    私が実行した範囲ではうまくううごいたんですけどね、

      public partial class Form1 : Form
      {
        public Form1()
        {
          InitializeComponent();
          this.openFileDialog1.RestoreDirectory = true;
        }
    
        private void button1_Click(object sender, EventArgs e)
        {
          if (this.openFileDialog1.ShowDialog() == DialogResult.OK)
          {
            string defaultfile = this.openFileDialog1.FileName;
            this.textBox1.Text = defaultfile;
          }
        }
    
        private void button2_Click(object sender, EventArgs e)
        {
          string defaultfile = @"C:\Users\えムナウ\Desktop";
          this.openFileDialog1.InitialDirectory = defaultfile;
          Environment.CurrentDirectory = defaultfile;
          this.textBox1.Text = "ファイルを選択してください";
        }
      }
    

    えムナウ@わんくま同盟 Microsoft MVP Visual Studio C# Since 2005/01-2010/12
    2010年4月20日 12:24
  • OSによって違うんですかね。
    Windows7でやってます。

     


    えムナウ@わんくま同盟 Microsoft MVP Visual Studio C# Since 2005/01-2010/12
    2010年4月20日 12:25
  • XP環境で確認しました。

    OpenFileDialog1.InitialDirectory = DefaultFile
    OpenFileDialog1.FileName = ""

    としてください。


    えムナウ@わんくま同盟 Microsoft MVP Visual Studio C# Since 2005/01-2010/12
    • 回答としてマーク 菊地俊介 2010年4月27日 1:54
    2010年4月21日 10:07
  • XP環境で確認しました。

    OpenFileDialog1.InitialDirectory = DefaultFile
    OpenFileDialog1.FileName = ""

    としてください。


    えムナウ@わんくま同盟 Microsoft MVP Visual Studio C# Since 2005/01-2010/12


    話が終わったと思い長い間確認していませんでした。

    皆様、ありがとうございます。

    2010年6月2日 5:00