🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

2回答

5086閲覧

C#で作業ディレクトリを取得したい

Nero1129

総合スコア130

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2020/12/20 07:28

編集2020/12/20 07:58

前提・実現したいこと

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

作業ディレクトを取得したく、上記のサイトを参考に手元の完了で実行した結果

C#

1using System; 2using System.IO; 3using System.Reflection; 4 5namespace namespace { 6 class Program 7 { 8 static void Main(string[] args) 9 { 10 Console.WriteLine(System.AppDomain.CurrentDomain.BaseDirectory); 11 Console.WriteLine(Directory.GetCurrentDirectory()); 12 Console.WriteLine(Directory.GetParent(Assembly.GetExecutingAssembly().Location)); 13 Console.WriteLine(Environment.CurrentDirectory); 14 Console.WriteLine(System.IO.Path.GetDirectoryName(System.IO.Path.GetFullPath(Environment.GetCommandLineArgs()[0]))); 15 Console.WriteLine(System.IO.Path.GetDirectoryName(System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName)); 16 } 17 } 18}
// 実行結果 C:\Users\{UserName}}\source\repos\{SolutionName}\{ProjectName}\bin\Debug\netcoreapp3.1\ C:\Users\{UserName}}\source\repos\{SolutionName}\{ProjectName}\bin\Debug\netcoreapp3.1 C:\Users\{UserName}}\source\repos\{SolutionName}\{ProjectName}\bin\Debug\netcoreapp3.1 C:\Users\{UserName}}\source\repos\{SolutionName}\{ProjectName}\bin\Debug\netcoreapp3.1 C:\Users\{UserName}}\source\repos\{SolutionName}\{ProjectName}\bin\Debug\netcoreapp3.1 C:\Users\{UserName}}\source\repos\{SolutionName}\{ProjectName}\bin\Debug\netcoreapp3.1

となってしまいました。
参照したいファイルがプロジェクトの直下にあるので、プロジェクトまでを自動取得するプログラムが書きたいです。
どうすれば、取得できるでしょうか?ほかの記事も読み漁ったのですが、同様のことしか書かれておらず困っております。

【追記】
最終的にはWindowsサービスとして利用したいので、サービスとして利用できれば、参照したいファイルがプロジェクト直下ではない方法でも大丈夫です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dodox86

2020/12/20 07:38

ここでいう「作業ディレクトリ」とは何を指しますか。「プロジェクト」とは、Visual Studioでのプログラムのビルドの為のファイルの構成要素のひとつでしかないです。実行プログラムにとっては関係ありません。
YAmaGNZ

2020/12/20 07:51

その参照したいファイルもプロジェクトに含んで、コンパイル時にコピーするようにすれば、コンパイル時に実行ファイルと同じフォルダに出力されます。 そういったことを行った方がよさそうな感じがします。
Nero1129

2020/12/20 08:00

> YAmaGNZ 追記しましたが、最終的にWindowsサービスとして利用したのですが、どの方法が最適解かよくわかってないのですが、サービスとして利用する場合はコピーする方が正解ですか? コンパイルする言語は初めてで、コピーする方法もわからないので、ご教示お願い致します。
YAmaGNZ

2020/12/20 08:42

作成するものがWindowsサービスだったとしても、ソースを利用するのではなくコンパイルで得られた成果物を利用するのが一般的だと思います。 ソリューションエクスプローラのプロジェクトを右クリックして出てくる「追加」から既存ファイルの追加を行って出力フォルダにコピーするよう変更すればいいかと思います。 参照するものによってはリソースとして実行ファイルに含めるなど方法があります。
dodox86

2020/12/20 08:49

参照したいファイルが存在するディレクトリを「作業ディレクトリ」と言っているのでしょうか。であれば既にいくつかコメントいただいていることに重なりますが、ひとつの案として実行ファイルと同じディレクトリにその参照するファイルも配置して、「実行ファイルのディレクトリ\参照したいファイル」のようにPATHの操作をします。ちゃんとした製品ならば、インストーラーなども作ります。参照(読み取り)だけのファイルならそれでも良いですが、書き込みも行うようであれば適切なディレクトリをインストーラーで作成して、そこへ配置します。
guest

回答2

0

ベストアンサー

こんばんは。
プロジェクトのディレクトリはアプリのリリース時には同梱しないのが通常ですので、他の方が質問への追記・修正の依頼で仰られているように、コンパイル時にファイルをアプリケーションのディレクトリにコピーされるように設定するのが良いと思われます。
その場合には、ソリューションエクスプローラから対象のファイルを選択し、プロパティウインドウの「出力ディレクトリにコピー」を「常に」または「新しい場合はコピー」にします。

どうしてもプロジェクトディレクトリまでを取得したいのであれば、

csharp

1new DirectoryInfo(System.AppDomain.CurrentDomain.BaseDirectory).Parent.Parent.Parent.FullPath

で取得できると思われます。
お役に立てれば幸いです。

投稿2020/12/20 08:06

編集2020/12/20 08:07
mtripg6666tdr

総合スコア37

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

C#には __ LINE __ __ FILE __ と同等のものがありますか?

ここでの、

Console.WriteLine(" File: {0}", sf.GetFileName());

はソースコードのファイルパスが取ってこれますんで、そこからディレクトリが取れるでしょう

投稿2020/12/20 07:49

y_waiwai

総合スコア88038

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問