誰かがdata.xmlファイルの正しいファイルパスを取得する方法を教えてもらえますか?ここにファイルがあります:
以下は、指定されたパスにファイルが存在するかどうかを確認する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メソッドがある場合、コンソールアプリは実行可能アプリになる可能性があるため、違いはないことは正しいですか?
ありがとう
Data.xmlを出力ビルドディレクトリに追加することもできます。ファイルを右クリックし、Copy if newer
のCopy 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がこれらをグループ化する方法です)。
現在の作業ディレクトリを取得します。
Directory.GetCurrentDirectory() + "/App_Data/data.xml";
重要:App_Data
は、アプリケーションと同じディレクトリにある必要があります。
data.xml
ファイルを取得する最善の方法は、アプリケーションと一緒に運ぶか、ファイルを保存することです。ユーザーの「ホーム」ディレクトリ(またはWindows 8で呼び出されるもの)。
ファイルを埋め込み、リフレクションを使用して取得できます。
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