7

重複の可能性:
コンソールアプリがC#で実行されているディレクトリを確認するにはどうすればよいですか?

プログラムを実行するコンソールの現在の作業ディレクトリを取得して、プログラム引数として渡された相対パスを解決するにはどうすればよいですか?

私が自分のプログラムをここに置いたとしましょう:c:\tools\program.exe しかし、私はさまざまな場所からそれを呼び出しています。私がここにいるとしましょう:C:\Users\Me\Documents\そして私はこのコマンドを実行しますprogram.exe --src=somefile.txt --dest=subdir\otherfile.txt

Environment.CurrentDirectorySystem.Reflection.Assembly.GetExecutingAssembly().Location戻りますが、に関連するパスをc:\tools解決できるようにしたいと思います。somefile.txtsubdir\oterfile.txtC:\Users\Me\Documents\

======更新======

ご協力ありがとうございました。期待通りに動作しているようですEnvironment.CurrentDirectory。私の場合、問題の原因はXenocodeのPostbuildツール(現在はSpoon Virtual Application Studioと呼ばれています)であり、すべてのプログラムのファイル(dll、構成などを含む)を1つの実行可能ファイルに「パック」するために使用することがあります。Environmentこれは非常に便利ですが、この場合、「仮想化」機能がプログラムの変数を台無しにしました。私はなんとかその問題を解決することができました。

4

2 に答える 2

15

Environment.CurrentDirectoryは、現在の作業ディレクトリを提供します

簡単な例を示しましょう。

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("Startup: " + Environment.CurrentDirectory);
        Environment.CurrentDirectory = @"D:\temp";
        Console.WriteLine("After:" + Environment.CurrentDirectory);
    }
}

D:\tempここで、という名前の2つのフォルダーを作成しD:\temp2
、実行可能ファイルをD:\temp
[コマンドプロンプトを開く]に配置して、現在の作業ディレクトリを次のように設定しcd D:\temp2
ます。..\temp\mytestapp.exe

出力は

Startup: D:\temp2
After: D:\temp

好奇心として:

これは、Net1.1のEnvironment.CurrentDirectoryのドキュメントでした

現在のディレクトリの完全修飾パスを取得して設定します。つまり、このプロセスが開始されるディレクトリです。

これはNET4.0のドキュメントです

現在の作業ディレクトリの完全修飾パスを取得または設定します。

于 2012-11-27T15:45:00.290 に答える
1

EnvironmentおよびPathクラスを使用します。http://msdn.microsoft.com/en-us/library/fyy7a5kt.aspx

var fqn = Path.Combine(Environment.CurrentDirectory, "somefile.txt")

ただし、ドキュメントを操作するには、次のものが必要です。

var fqn = Path.Combine(
     Environment.GetFolderPath(Environment.SpecialFolder.Person),
     "somefile.txt");

`fqn'は完全修飾名のTLAです

于 2012-11-27T15:19:57.970 に答える