web-dev-qa-db-ja.com

C#コンソールアプリケーション内の正しいファイルパス

誰かがdata.xmlファイルの正しいファイルパスを取得する方法を教えてもらえますか?ここにファイルがあります:

enter image description here

以下は、指定されたパスにファイルが存在するかどうかを確認するC#コードです。

public class Parser
{
    static void Main(string[] args)
    {
        Console.WriteLine(File.Exists("App_Data/data.xml"));
        Console.Read();
    }
}

私はFalseを繰り返し続けます。つまり、そのようなファイルは存在しません。したがって、これまでに試したファイルパスには次のものが含まれます。

"~/App_Data/data.xml"
"/App_Data/data.xml"
"App_Data/data.xml"

これがWebアプリケーションの場合、HttpContextを使用してファイルを取得することで、何をすべきかがわかります。しかし、これはコンソールアプリケーションであるため、わかりません。

関連するメモとして、コンソールアプリケーションと実行可能アプリケーションの違いは何ですか? Mainメソッドがある場合、コンソールアプリは実行可能アプリになる可能性があるため、違いはないことは正しいですか?

ありがとう

18
J86

Data.xmlを出力ビルドディレクトリに追加することもできます。ファイルを右クリックし、Copy if newerCopy alwaysまたはCopy to output directory optionを選択する必要があります。

次に、以下を使用できます。

Console.WriteLine(File.Exists("App_Data/data.xml")); // Should print True

ただし、data.xmlの変更が予想される場合は、プロジェクトの外のどこかでフルパスを指定するだけです(App_Data/data.xmlがC:/ Tempにコピーされていると想定)。

Console.WriteLine(File.Exists("C:/Temp/App_Data/data.xml")); // Prints True

また、コンソールと実行可能アプリケーションに関連する他の質問の場合、exeは、console、wpf、winformsなどの異なるアプリケーションタイプにすることができます(Visual Studioがこれらをグループ化する方法です)。

20
Leon

現在の作業ディレクトリを取得します。

Directory.GetCurrentDirectory() + "/App_Data/data.xml";

重要:App_Dataは、アプリケーションと同じディレクトリにある必要があります。

data.xmlファイルを取得する最善の方法は、アプリケーションと一緒に運ぶか、ファイルを保存することです。ユーザーの「ホーム」ディレクトリ(またはWindows 8で呼び出されるもの)。

11
akluth

ファイルを埋め込み、リフレクションを使用して取得できます。

Steam s = Assembly.GetExecutingAssembly().GetManifestResourceStream("file name");
XmlDocument d = new XmlDocument();
steamReader r = new StreamReader(s);
d.LoadXml(r.ReadToEnd());
r.Close();

この記事をチェックしてください。リフレクションを使用してファイルを埋め込み、取得する方法を示します。 http://support.Microsoft.com/kb/319292

0
Flavia