2009-07-29 8 views
4

Когда я запускаю следующий код, файл XML является правильно создан в c:\temp:Как создать файл с StreamWriter с использованием относительного пути?

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 с относительным путем внутри моего проекта?

+0

ASP.NET или Windows? –

+0

это приложение WPF с использованием Prism, так что это происходит в модуле –

+0

Любой тихий catch :)? –

ответ

1

./Data/CustomerMock2.xml Работает?

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

Всегда опасно полагаться на концепцию «Текущий каталог», поэтому вам понадобится исходная точка. В проекте WinForms, вы можете получить расположение .EXE с

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

В WPF будет что-то подобное.

Но если вы находитесь в библиотеке и не имеете доступа к объектам приложения (или среды), вам следует подумать о создании параметра или свойства BaseFolder, чтобы основное приложение могло управлять папками.

3

Вы настраиваете данные XML, которые должны быть скопированы во время компиляции (так что это не в каталоге проекта, а в папке bin)? В этом случае вы можете добраться до него, используя

string xmlFile = string.Format("{0}/Data/{1}",AppDomain.CurrentDomain.BaseDirectory,"myxml.xml"); 
0

Относительные пути относятся к текущему каталогу. Возможно, вас нет в каталоге bin/debug ... Вы должны построить абсолютный путь, основанный на каталоге exe, как показано Крисом. Кроме того, конструктор StreamWriter не будет создавать каталог, вам нужно его явно создать, если он не существует.

Смежные вопросы