C#でカレントディレクトリを取得する方法

このQ&Aのポイント
  • C#でカレントディレクトリの取得方法について自作の.exeファイルの置かれているディレクトリ場所を取得するプログラムを作成する方法を教えてください。
  • 自作exeファイルのディレクトリ構造は、「*:*/hoge/plugin/自作.exe」です。この時、一個上のディレクトリを参照して、ディレクトリパスを取得する方法などがありますか?
  • また、以下のプログラムではできなかったのですが、参考までに載せました。string stParentName = System.IO.Path.GetDirectoryName(@"*:*/hoge/plugin/自作.exe"); MessageBox.Show(stParentName);
回答を見る
  • ベストアンサー

C#でカレントディレクトリの取得方法について

 自作の.exeファイルの置かれているディレクトリ場所を  取得するプログラムを作成したく思います・  自作exeファイルのディレクトリ構造は、「*:*/hoge/plugin/自作.exe」です。  この時、一個上のディレクトリを参照して、ディレクトリパスを取得する  方法などがありましたらおしえて頂きたく思います。  ちなみに、以下のプログラムではできなかったのですが、参考までに載せました。  よろしくお願いします。  string stParentName = System.IO.Path.GetDirectoryName(@"*:*/hoge/plugin/自作.exe"); MessageBox.Show(stParentName);

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

こんばんは >一個上のディレクトリを参照して、ディレクトリパスを取得する *:*/hoge/pluginを取得することでしょうか? 上記の仮定ですと System.IO.FileInfo ofile = new System.IO.FileInfo(@"*:*/hoge/plugin/自作.exe"); string stParentName = ofile.DirectoryName; MessageBox.Show(stParentName); このような感じでしょうか?

anene0000
質問者

お礼

ありがとうございます。おっしゃっていただいた情報を元に検索して、 System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);が目指したものだとわかりました。ありがとうございます。

anene0000
質問者

補足

日本語が悪くすみません。 >一個上のディレクトリを参照して、ディレクトリパスを取得する *:*/hoge/pluginを取得することです。 ありがとうございます。

その他の回答 (3)

  • FAY
  • ベストアンサー率49% (95/193)
回答No.4

んー・・・単純に String appPath = System.Reflection.Assembly.GetEntryAssembly().Location; appPath = appPath.Substring(0, appPath.LastIndexOf('\\')); とかじゃダメなのかしらん。

anene0000
質問者

お礼

ありがとうございます。おっしゃっていただいた情報を元に検索して、 System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);が目指したものだとわかりました。ありがとうございます。

anene0000
質問者

補足

皆様有難う御座います。ここで改めて感謝いたします。皆様の回答で検索ワードの候補が絞れて答えが出て来ました。ありがとうございます。 一番先に回答いただいた方にベストアンサーにさせて頂きますが、皆様の回答でベストアンサーでした・ありがとうございます。

  • Wr5
  • ベストアンサー率53% (2177/4070)
回答No.3

> 自作の.exeファイルの置かれているディレクトリ場所を > 取得するプログラムを作成したく思います・ カレントディレクトリと実行ファイルのあるディレクトリが必ずしも同一ではない。 という点には注意が必要です。 # EXEファイルのショートカットを作成して作業フォルダを指定すればそちらがカレントディレクトリになりますから。 その上で…… C:/MyApp/hoge/plugin/自作.exe という実行ファイルだった場合にどういうパスが欲しいのでしょうか? C:/MyApp/hoge/pluginが欲しいのならば、既にあるように実行ファイルのファイル名でSystem.IO.Path.GetDirectoryName()を実行すれば得られます。 C:/MyApp/hogeが欲しいのならば、実行ファイルのファイル名でSystem.IO.Path.GetDirectoryName()を実行し、得られたパス名で再度System.IO.Path.GetDirectoryName()を実行すれば得られます。 http://msdn.microsoft.com/ja-jp/library/system.io.path.getdirectoryname%28v=vs.100%29.aspx の「解説」に >返されたパスを GetDirectoryName メソッドに再度渡すと、返された文字列に対してこのメソッドを呼び出すたびに 1 フォルダー レベルの切り捨てが行われます。たとえば、パス "C:\Directory\SubDirectory\test.txt" を GetDirectoryName メソッドに渡すと、"C:\Directory\SubDirectory" が返されます。この文字列 "C:\Directory\SubDirectory" を GetDirectoryName に渡すと、"C:\Directory" になります。 とあります。 最初に明記した通り、実行ファイルのパスではなくカレントディレクトリが欲しいのであれば、 System.IO.Directory.GetCurrentDirectory()になります。 プログラム実行中にカレントディレクトリは変更される可能性がある。 という点にはご注意を。

anene0000
質問者

お礼

ありがとうございます。おっしゃっていただいた情報を元に検索して、 System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);が目指したものだとわかりました。ありがとうございます。

anene0000
質問者

補足

勉強になりました。ありがとうございます。 ディレクトリの取得について参考になりました・

  • x-1919
  • ベストアンサー率52% (91/173)
回答No.2

どのプログラム視点で質問してるの? 自作.exe ていうか自身のディレクトリ パス? System.AppDomain.CurrentDomain.BaseDirectory

anene0000
質問者

お礼

ありがとうございます。おっしゃっていただいた情報を元に検索して、 System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);が目指したものだとわかりました。ありがとうございます。

anene0000
質問者

補足

アプリケーションの実行パスを取得する方法についておしえていただきありがとうございます。 >一個上のディレクトリを参照して、ディレクトリパスを取得するし、連結して、*:*/hoge/pluginまでのパスを取得することです。

関連するQ&A

  • カレントディレクトリの取得

    お世話になります。 バッチファイルでの処理中にカレントディレクトリをフルパスで取得し 変数に値を格納したいのですが、やり方が分かりません。。 いろいろ調べた結果、カレントディレクトリの取得は「CD」 変数への格納は、「==」or「set」なのかな?ってぐらいの知識レベルです。 上記のコマンド以外でも構いませんので、カレントディレクトリを取得し 変数に値を格納する方法を、記述の仕方を含めてご教示くださいませ。 宜しくお願い致します。

  • フルパスからファイル名取得の方法

    指定したフォルダのフルパスを「bmpFiles」に入れているのですが、表示する時はファイル名のみの表示にしたくて「Path.GetFileName」を使用してファイル名を取得しようとしたのですが、「型'stringの1次元配列'の値を'string'に変換できません」というエラーが出てしまいます。 VBを始めたばかりでよく分からないのでアドバイスをお願いします。 Dim imageDir As String = fbd.SelectedPath ' 指定フォルダまでのディレクトリ Dim bmpFiles As String() = _ System.IO.Directory.GetFiles(imageDir, "*.bmp") 'フルパス Dim bmpFileName As String = _ Path.GetFileName(bmpFiles)  ←bmpFilesで上記エラー

  • VBA カレントディレクトリ取得について

    お世話になってます。 VBAの初心者です。 test.mdbファイルを "C\TEST" という作業ディレクトリ配下において そのmdbのモジュールでCurDirを使用してカレントディレクトリを取得する という処理をVBAで書きたいのですが、 Dim strPath As String strPath = CurDir("C") と記述し実行しても strPathに格納される値は "C\" となってしまいます。 本当は"C\TEST"という値を取得したいのですが、 使用方法が間違っているのか、何が悪いのかよく分かりません。 よろしくお願い致します。

  • C♯での特殊ディレクトリ取得について

    C♯での特殊ディレクトリ取得について ※僕はプログラミング初心者です それを踏まえてお読みください ボタンをクリックした時にChromeを起動させたいので、 System.Diagnostics.Process.Start(@"ファイルアドレス"); を使ってやることにしました しかしGoogleChromeのある場所は、 C:\Documents and Settings\ユーザーネーム\Local Settings\Application Data\Google\Chrome\Application\chrome.exe とユーザーネームが入っていて指定できません そこで、特殊ディレクトリ取得について調べてみたのですが、僕の関数の知識がないため、できませんでした サンプルを記述していただけるととても助かります 参考URL ttp://jeanne.wankuma.com/tips/csharp/path/systemdirectory.html

  • 最下層のファイルまで取得する

    VB.NETというサイトの「フォルダ以下のファイルを最下層まで検索または取得する」(http://jeanne.wankuma.com/tips/vb.net/directory/getfilesmostdeep.html)に書かれているコードを実行しようとしてもエラーが出てしまいます。どのように修正したら実行されるのか、ご教授いただけないでしょうか。よろしくお願いいたします。 VBAのバージョンは7.0です。 サンプルにある通り、C直下にHogeフォルダを作り、その中にHoge.txtを作ってあります。 標準モジュールに「使用例は以下のようになります。」に書かれているコードを、クラスモジュールには「以下にサンプルコードを示します。」に書かれているコードを張り付けました。クラス名は「GetFilesMostDeep」としています。 下記がコードの内容となっています。 ★標準モジュール----------------------------- Sub Macro4() ' ファイル名に「Hoge」を含み、拡張子が「.txt」のファイルを最下層まで検索し取得する Dim stFilePathes As String() = GetFilesMostDeep("C:\Hoge\", "*Hoge*.txt") Dim stPrompt As String = String.Empty ' 取得したファイル名を列挙する For Each stFilePath As String In stFilePathes stPrompt &= stFilePath & System.Environment.NewLine Next stFilePath ' 取得したすべてのファイルパスを表示する If stPrompt <> String.Empty Then MessageBox.Show (stPrompt) End If End Sub ★--------------------------------------- ★クラスモジュール-------------------------------- ''' --------------------------------------------------------------------------------------- ''' <summary> ''' 指定した検索パターンに一致するファイルを最下層まで検索しすべて返します。</summary> ''' <param name="stRootPath"> ''' 検索を開始する最上層のディレクトリへのパス。</param> ''' <param name="stPattern"> ''' パス内のファイル名と対応させる検索文字列。</param> ''' <returns> ''' 検索パターンに一致したすべてのファイルパス。</returns> ''' --------------------------------------------------------------------------------------- Public Shared Function GetFilesMostDeep(ByVal stRootPath As String, ByVal stPattern As String) As String() Dim hStringCollection As New System.Collections.Specialized.StringCollection() ' このディレクトリ内のすべてのファイルを検索する For Each stFilePath As String In System.IO.Directory.GetFiles(stRootPath, stPattern) hStringCollection.Add (stFilePath) Next stFilePath ' このディレクトリ内のすべてのサブディレクトリを検索する (再帰) For Each stDirPath As String In System.IO.Directory.GetDirectories(stRootPath) Dim stFilePathes As String() = GetFilesMostDeep(stDirPath, stPattern) ' 条件に合致したファイルがあった場合は、ArrayList に加える If Not stFilePathes Is Nothing Then hStringCollection.AddRange (stFilePathes) End If Next stDirPath ' StringCollection を 1 次元の String 配列にして返す Dim stReturns As String() = New String(hStringCollection.Count - 1) {} hStringCollection.CopyTo(stReturns, 0) Return stReturns End Function

  • 名前空間の省略

    VBの初心者です。 Private Path As String = System.IO.Path.GetDirectoryName(Application.ExecutablePath) や Private DataFileName As String = System.IO.Path.Combine(Path, "data.txt") の記述で、名前空間をインポートして、 Imports System.IO Private Path As String = Path.GetDirectoryName(Application.ExecutablePath) Private DataFileName As String = Path.Combine(Path, "data.txt") と記述すると、 'GetDirectoryName'は 'String' のメンバーではありません。 'Combine' は 'String' のメンバーではありません。 といったコンパイルエラーが出てしまうのですが、=の右辺の名前空間を省略した場合、何かまずいことがあるのでしょうか?理由がよく分かりかねています。 よろしくお願い致します。

  • プログラムから起動ディレクトリを知るには?

    Jar または class 自身が起動したディレクトリをプログラム内から取得したいのですが、どうすればよいでしょう? つまり、C の argv[0] にあたる絶対ディレクトリパスを取得したいのです。.jar と同じディレクトリに .properties などを置いて、保存・読み込みするようにするのが目的です。

    • ベストアンサー
    • Java
  • マクロ有効テンプレートのカレントディレクトリ

    Excel2010マクロ有効「テンプレート」で、マクロを組んでいます。 そのテンプレートが存在するディレクトリを取得したいのですができません。 Excelのファイルメニューからテンプレートを開いた場合は、 ThisWorkbook.path で取得できるのですが、テンプレートのアイコンをダブルクリックして開いた場合はThisWorkbook.pathには何も設定されていません。 当たり前といえば当たり前かもしれませんが、何とか取得できる方法はありませんでしょうか。

  • パスから最後のディレクトリだけを取得したいです

    【環境】WindowsXP、VC++2005(MFC) タイトルの通りなんですが、例えば 「D:\10_test\hoge\sample」というディレクトリのパスから 「sample」だけを取得したいのですが、どうすれば出来ますでしょうか? ご教授お願いいたしますm(__)m

  • C#のビルド方法について質問です。

    IDEをつかわず、コマンドプロンプト上でC#のソースをビルドする時の方法について質問です。 まず以下のようなコードがあるとします。 まずC:\の直下に以下のソースを作成しました。 =================================================== using System; using System.IO; using System.Windows.Forms; namespace Add.TestClass{ public class LibraryClass{ public LibraryClass(){ MessageBox.Show("クラスライブラリコンストラクタの実行"); } } } =================================================== 上記クラスをdllファイルとしてビルドします。 csc /t:library /out:Add.TestClass library.class  と上記のようにビルドしました。するとAdd.TestClass.dllというファイルが確かにできあがりました。 次にこれを実際に実行するためのファイルをつくりました。 それが以下になります。 同じくC:\直下に以下のようなソースを作成します。 =================================================== using System; using System.IO; using System.Windows.Forms; using Add.TestClass; public class MainClass{ public static void Main(String [] args){ LibraryClass obj = new LibraryClass(); } } =================================================== このファイルをビルドします。 csc /r:Add.TestClass.dll main.cs としてビルドし、その後 mainというファイルを実行しました。 するとキチンとMessageBoxで MessageBox.Show("クラスライブラリコンストラクタの実行");が実行されました。 ここまでは問題ないのですが、この場合 main.exeファイルとAdd.TestClass.dllというファイルが 同じ階層に存在するような状態になっているのですが、これを main.exeファイルのある階層にdllというディレクトリを作成し そのdllの中にAdd.TestClass.dllというファイルをおいた階層状況でmain.exeファイルを実行したいのです。 そのためにまず、 csc /r:”C:\dll\Add.TestClass.dll" main.cs 上記のようなビルドオプションでビルドしてみたのですが、ビルドはとおりましたが -------------------------------------------------------------------------------------------------------------------- ハンドルされていない例外: System.IO.FileNotFoundException: ファイルまたはアセン ブリ 'Add.TestClass, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null'、ま たはその依存関係の 1 つが読み込めませんでした。指定されたファイルが見つかりませ ん。 場所 MainClass.Main(String[] args) -------------------------------------------------------------------------------------------------------------------- というエラーがでました。 このdllファイルを特定の任意のディレクトリ内において、main.exeを実行してうまく動くようにするためには どのようなビルドオプションをつけたらいいのでしょうか? よろしくご教授お願いいたしま。

専門家に質問してみよう