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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> StreamWriter директория для записи 
V
    Опции темы
IGV
Дата 25.9.2010, 16:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Столкнулся с неожиданной и совершенно непонятной для меня проблемой.
Приведу пример кода и дам комментарии.
Создаем консольное приложение:
Код

using System;
using System.IO;

Код

        [STAThread]
        static void Main()
        {
            using (StreamWriter writer = new StreamWriter("test_console0.txt"))
            {
                writer.WriteLine("test");
                writer.Close();
            }

            using (StreamWriter writer = new StreamWriter("C:\\temp\\test_console1.txt"))
            {
                writer.WriteLine("test");
                writer.Close();
            }

            using (StreamWriter writer = new StreamWriter("test_console2.txt"))
            {
                writer.WriteLine("test");
                writer.Close();
            }

            var saveFileDialog = new System.Windows.Forms.SaveFileDialog();
            saveFileDialog.ShowDialog();
            if (!string.IsNullOrEmpty(saveFileDialog.FileName))
            {
                using (StreamWriter writer = new StreamWriter(saveFileDialog.FileName))
                {
                    writer.WriteLine("test");
                    writer.Close();
                }
            }

            using (StreamWriter writer = new StreamWriter("test_console4.txt"))
            {
                writer.WriteLine("test");
                writer.Close();
            }
        }

Файл test_console0.txt - был создан в той же директории, где лежит exe'шник.
Файл test_console1.txt - был создан в директории "C:\temp\".
Файл test_console2.txt - был создан в той же директории, где лежит exe'шник.
Файл test_console3.txt (файл, указанный с помощью SaveFileDialog) - был создан в выбранной в SaveFileDialog директории. (в тестовом примере - "Рабочий стол").
Файл test_console4.txt - был создан в выбранной в SaveFileDialog директории. (в тестовом примере "Рабочий стол").

А теперь вопрос:
Почему файл test_console4.txt был создан не в директории, где лежит exe'шник?


Это сообщение отредактировал(а) IGV - 25.9.2010, 16:42
PM MAIL ICQ   Вверх
CYBERDREAM
Дата 25.9.2010, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I think, there4 I am
***


Профиль
Группа: Завсегдатай
Сообщений: 1096
Регистрация: 31.10.2006
Где: CyberLand

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



Если хочешь навярняка сохранять рядом с ехе, то используй Application.StartupPath или что то вроде того, если консоль, то  System.Reflection.Assembly.GetExecutingAssembly().Location

По идее у тебя Environment.CurrentDirectory сбивается после вызова SaveFileDialog. Хотя у меня данны код сохранил консоль4 рядом с ехе


--------------------
Ищем .Net, Java, Javascript разработчиков, Кипр, Лимассол. (знание английского необязательно)
Telegram, skype: kuchuk.artiom
PM MAIL WWW   Вверх
IGV
Дата 25.9.2010, 17:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



При создании объекта StreamWriter, если в конструктор передается, только имя файла (fileName), то StreamWriter определяет полный путь до файла так:
Код

string fullPath = System.IO.Directory.GetCurrentDirectory() + fileName;

SaveFileDialog изменяет значение
Код

System.IO.Directory.GetCurrentDirectory();

на то, которое использовалось при сохранении.
Чтобы изменения не происходило необходимо "выставить" свойство
Код

FileDialog.RestoreDirectory = true

По умолчанию
Код

FileDialog.RestoreDirectory = false

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

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


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

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




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


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

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