5

次のコードを実行すると、XML ファイルが で正しく作成さc:\tempます。

XmlSerializer xs = new XmlSerializer(typeof(ObservableCollection<Models.Customer>));
using (StreamWriter wr = new StreamWriter("C:/temp/CustomerMock2.xml"))
{
    xs.Serialize(wr, CustomerList);
}

ただし、実際にはプロジェクトの下のサブディレクトリに作成したいのですが、これを行うと:

using (StreamWriter wr = new StreamWriter("Data/CustomerMock2.xml"))

それを書き込むかのように機能しますが、ファイルはそのディレクトリに表示されません。

C:\Projects\Prototype12\CustomersModul\bin\Debug\Data.

プロジェクト内の相対パスを使用して StreamWriter でファイルを作成するにはどうすればよいですか?

4

4 に答える 4

9

「現在のディレクトリ」の概念に頼るのは常に危険なので、出発点が必要になります。WinForms プロジェクトでは、.EXE の場所を取得できます。

string exeFolder = System.IO.Path.GetDirectoryName(Application.ExecutablePath);

WPF にも似たようなものがあります。

ただし、ライブラリにいて、アプリケーション (または環境) オブジェクトにアクセスできない場合は、BaseFolder パラメーターまたはプロパティを作成して、メイン アプリケーションがフォルダーを制御できるようにすることを検討する必要があります。

于 2009-07-29T09:10:18.883 に答える
5

機能します./Data/CustomerMock2.xmlか?

using (StreamWriter wr = new StreamWriter("./Data/CustomerMock2.xml"))
于 2009-07-29T09:08:42.163 に答える
4

コンパイル時に XML データをコピーするように設定していますか (したがって、実際のプロジェクト ディレクトリではなく、bin フォルダーにあります)。その場合、次を使用してアクセスできます

string xmlFile = string.Format("{0}/Data/{1}",AppDomain.CurrentDomain.BaseDirectory,"myxml.xml");
于 2009-07-29T09:16:28.560 に答える
0

相対パスは、現在のディレクトリからの相対パスです。bin/debug ディレクトリにいない可能性があります... Chris が示すように、exe ディレクトリに基づいて絶対パスを作成する必要があります。また、StreamWriter コンストラクターはディレクトリを作成しません。ディレクトリが存在しない場合は、明示的に作成する必要があります。

于 2009-07-29T09:22:13.183 に答える