Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с путями при сохранении файлов 
V
    Опции темы
Elfet
  Дата 29.4.2007, 17:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

Репутация: нет
Всего: 16



Код работал нормально до того как я начал использовать openFileDialog smile
Код

            try
            {
                Directory.SetCurrentDirectory(System.Environment.CurrentDirectory);
                if (Directory.Exists("\\Data\\" + System.Environment.UserName))
                {
                    using (XmlTextWriter writer = new XmlTextWriter(".\\Data\\" + System.Environment.UserName + "\\Config.xml", Encoding.UTF8))
                    {

Если я в программе не открываю openFileDialog то всё нормально. Но если я запускаю его, то вот тут: 
Код

XmlTextWriter writer = new XmlTextWriter(".\\Data\\" + System.Environment.UserName + "\\Config.xml", Encoding.UTF8)

возникает ошибка: пишет что не может найти "путь до папки из которой открывал  openFileDialog\Data\Elfet\Config.xml"
А мне нужно что бы сохранилось всё в папку по относительному пути .\Data\Elfet\ к моей программе. В папке где находится программа есть папка Data\Elfet


--------------------
PM MAIL WWW Skype   Вверх
tol05
Дата 29.4.2007, 22:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 63
Всего: 170



А почему бы тебе не использовать конструкцию:
Код

string destPath = Assembly.GetExecutingAssembly.ManifestModule.Assembly.Location + "\Data\Elfet\";


или
Код

string destPath = Assembly.GetExecutingAssembly.ManifestModule.Assembly.Location + "\Data\";
XmlTextWriter writer = new XmlTextWriter(destPath + System.Environment.UserName + "\\Config.xml", Encoding.UTF8)


Дело в том, что, как я почитал MSDN, System.Environment.CurrentDirectory указывает на текущую рабочую директорию (с которой взаимодействует поток выполнения),она в процессе работы может меняться.
Assembly.GetExecutingAssembly.Location - путь к текущей выполняемой сборке. Если их будет несколько, и в разных папках, то время от времени тоже путь будет меняться, в зависимости от того, код какой сборки выполняется.
Assembly.GetExecutingAssembly.ManifestModule.Assembly.Location - путь к сборке, которая содержит манифест. Она одна, думаю, это неплохо smile


--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
Elfet
Дата 29.4.2007, 23:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

Репутация: нет
Всего: 16



Цитата(tol05 @  29.4.2007,  23:09 Найти цитируемый пост)
System.Environment.CurrentDirectory указывает на текущую рабочую директорию (с которой взаимодействует поток выполнения),она в процессе работы может меняться.

А в каком случае она меняется? Может если я не собираюсь трогать ничего такого, можно работать с этой штукой?

Добавлено через 2 минуты и 50 секунд
Юзать вот так?
Код

myPath = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Assembly.Location);



--------------------
PM MAIL WWW Skype   Вверх
AndZho
Дата 30.4.2007, 09:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 21.10.2006

Репутация: нет
Всего: нет



Можно еще так:

Код

 DirectoryInfo ApplicationDirectory = new System.IO.DirectoryInfo(".");

далее
Код

ApplicationDirectory.FullName+@"\"+...

PM MAIL ICQ   Вверх
tol05
Дата 30.4.2007, 10:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 63
Всего: 170



Нет, AndZho, не то. 
"." тоже каждый раз меняется, в зависимости от того, где находится папка, с которой работает процесс.

Хотел в инете найти описание моих вариантов, да что-то не прет. Особенно по System.Environment.CurrentDirectory.
Но можно подебагать и просто посмотреть.
Или поверьте на слово smile


Elfet, 
Код

myPath = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Assembly.Location);


да, это оно.


--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
AndZho
Дата 30.4.2007, 10:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 21.10.2006

Репутация: нет
Всего: нет



Цитата(Elfet @ 29.4.2007,  16:46)
А мне нужно что бы сохранилось всё в папку по относительному пути .\Data\Elfet\ к моей программе. В папке где находится программа есть папка Data\Elfet

Вариант 
Код

 DirectoryInfo ApplicationDirectory = new System.IO.DirectoryInfo(".");
 ApplicationDirectory.FullName + @"\Data\Elfet\"

вроде будет делать то что тебе нужно. Или я чего то не догоняю.
PM MAIL ICQ   Вверх
archeg
Дата 30.4.2007, 20:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 612
Регистрация: 6.1.2007
Где: Киев

Репутация: 11
Всего: 27



Цитата(AndZho @  30.4.2007,  10:12 Найти цитируемый пост)
Вариант 
Код

 DirectoryInfo ApplicationDirectory = new System.IO.DirectoryInfo(".");
 ApplicationDirectory.FullName + @"\Data\Elfet\"

вроде будет делать то что тебе нужно. Или я чего то не догоняю. 

Нет, tol05 прав: "." возвращает текущий каталог, он может изменяться в зависимости от некоторых обстоятельств и необязательно должен быть каталогом програмы. 
Например
Код

Directory.SetCurrentDirectory 

задает текущий каталог. Если не ошибаюсь какая-то винда могла устанавливать в свойствах ярлычка рабочий каталог - это он и есть. У меня ща виста - она такое не умеет.

Это сообщение отредактировал(а) archeg - 30.4.2007, 20:15


--------------------
ИМХО задница есть универсальный интерфейс. Ибо через задницу можно сделать абсолютно ВСЕ (bash.org.ru)

Дядька всегда можно спросить в аське, если не задалбывать - не откажет smile
И вообще, на самом деле я студент, и ненавижу обращение на "Вы") Тут все свои  ;)
PM MAIL ICQ Jabber   Вверх
Naum
Дата 2.5.2007, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 743
Регистрация: 7.9.2005
Где: Саратов, ул. Поса дского, 298

Репутация: 8
Всего: 15



Цитата(tol05 @  29.4.2007,  23:09 Найти цитируемый пост)
Assembly.GetExecutingAssembly.ManifestModule.Assembly.Location

А чем хуже System.Windows.Application.StartUpPath?



--------------------
У нас всего два праздника Новый год и ТЯПница.
PM MAIL ICQ   Вверх
tol05
Дата 2.5.2007, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 63
Всего: 170



Еле нашел в MSDN. 
Не знаю как у других, а у меня (MSDN for VS codename Orcas) класс System.Windows.Application свойства StartUpPath почему-то не содержит. А содержится оно почему-то в Microsoft.Office.Interop.Excel._Application interface. Это мне уже не нравится smile
Да и библиотека presentationframework.dll с этим классом тоже наверняка не у каждого обнаружится. Как понимаю это для Framework-а 3.0? Короче, проблемы уже здесь.

Почитал я о  System.Windows.Application классе. Но ведь он предназначен для 
Цитата

windows and dialog boxes!
 А если у меня консолька или dll? Не понравилось и это smile

А так больше ничего не скажу, вроде прикольный класс. Спасибо за инфу, кстати.


--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
Void
Дата 2.5.2007, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 25
Всего: 173



По-моему, Naum имел в виду System.Windows.Forms.Application.
System.Windows.Application (как и всё пространство имён System.Windows) действительно относится к .NET 3.0, конкретно, к WPF.


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
Naum
Дата 2.5.2007, 17:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 743
Регистрация: 7.9.2005
Где: Саратов, ул. Поса дского, 298

Репутация: 8
Всего: 15



Цитата(Void @  2.5.2007,  17:30 Найти цитируемый пост)
По-моему, Naum имел в виду System.Windows.Forms.Application.

Точно. Прошу прощения за очепятку.
Цитата(tol05 @  2.5.2007,  16:52 Найти цитируемый пост)
А если у меня консолька или dll?

Не раз уже проверялось, ничто не мешает вызывать System.Windows.Forms.Application.StartUpPath и в этих случаях.   smile  Это раз.
Второе, все равно, если хотим пользовать [Open|Save]FileDialog, без пространства имен System.Windows.Forms никак не обойтись. 



--------------------
У нас всего два праздника Новый год и ТЯПница.
PM MAIL ICQ   Вверх
tol05
Дата 2.5.2007, 18:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 63
Всего: 170



Цитата

если хотим пользовать [Open|Save]FileDialog, без пространства имен System.Windows.Forms никак не обойтись. 

Это конечно. Просто System.Windows.Application запутало, а мозги у меня и без того слабые  smile 


--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0578 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.