20

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 メソッドがある場合、コンソール アプリは実行可能アプリになる可能性があるため、違いはないということでよろしいですか?

ありがとう

4

3 に答える 3

25

出力ビルド ディレクトリに 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 は、コンソール、wpf、または winforms などの異なるアプリケーション タイプにすることができます (これは、ビジュアル スタジオがこれらをグループ化する方法です)。

于 2013-04-06T13:43:57.600 に答える
16

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

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

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

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

于 2013-04-06T13:33:56.493 に答える
0

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

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

この記事をチェックしてください。リフレクションを使用してファイルを埋め込み、取得する方法を示します: https://docs.microsoft.com/en-us/dotnet/api/system.reflection.assembly.getmanifestresourcestream?view=netframework-4.8

于 2013-04-06T14:01:43.863 に答える