none
Создание XML файла в заданной папке c#. RRS feed

  • Вопрос

  • Добрый вечер , столкнулся с проблемой
    при создании  файла XML через XmlTextWriter
    файл создаётся в папке Debug
    надо что-бы файл создавался в определенной папке XmlDocs .
    пытался писать имя папки включая полный адрес Directory.GetCurrentDirectory(); + имя папки,
    выдаёт исключение что не находит папку,
    хотя папка находится в проекте.

    Пожалуйста подскажите как можно создать 
    файл в определенной папке а не в папке Debug используя  XmlTextWriter ?

    код создания файла:

            static ModelXML()
            {
                if (File.Exists("infoFile.xml"))
                    return;
    
                XmlTextWriter xmlDoc = new XmlTextWriter("infoFile.xml", Encoding.UTF8);
    
                xmlDoc.WriteStartDocument();
                xmlDoc.WriteStartElement("info");
                xmlDoc.WriteEndDocument();
                xmlDoc.Close();
            } // end of ModelXML static c'tor

    21 июля 2013 г. 18:06

Ответы

  •         static ModelXML()
            {
                string fileNameShort = "infoFile.xml";
                string shortPathDir = "XmlDocs";
    
                // узнаю стартовый путь приложения, для примера.
                // для начала получу его процесс.
                System.Diagnostics.Process proc = System.Diagnostics.Process.GetCurrentProcess();
                // теперь по нему узнаю его стартовую папку
                string startPath = Path.GetDirectoryName(proc.MainModule.FileName);
                // вместо startPath можно указать любой путь, стартовая папка приложения указана просто для примера.
    
                // соединяю название папки XmlDocs путём до неё.
                string pathNewFull = Path.Combine(startPath, shortPathDir);
    
                // папка наверное нужна.
                if (Directory.Exists(pathNewFull) == false)
                {
                    Directory.CreateDirectory(pathNewFull);
                }
    
                // соединяю pathNewFull папку с имененм файла.
                string fileNameFull = Path.Combine(pathNewFull, fileNameShort);
    
                if (File.Exists(fileNameFull))
                    return;
    
                XmlTextWriter xmlDoc = new XmlTextWriter(fileNameFull, Encoding.UTF8);
    
                xmlDoc.WriteStartDocument();
                xmlDoc.WriteStartElement("info");
                xmlDoc.WriteEndDocument();
                xmlDoc.Close();
            } // end of ModelXML static c'tor


    нужно просто как-то указывать путь.
    В данном примере указывается как узнать путь, и куда его можно подставить (startPath или pathNewFull), если нужен другой.






    • Изменено INFEL8 23 июля 2013 г. 11:44 pathNewFull
    • Помечено в качестве ответа Konrud 3 августа 2013 г. 6:56
    23 июля 2013 г. 10:34

Все ответы

  • Папка XmlDocs находится в папке Debug?
    21 июля 2013 г. 21:26
  • Добрый день.

    1. Посмотрите, у вас между путем и именем файла слэш добавляется? Ведь GetCurrentDirectory в конце слэш не вставляет.

    2. Нужно аккуратно использовать Directory.GetCurrentDirectory(), может возвращать не путь от куда запущено приложение.

    22 июля 2013 г. 6:16
    Отвечающий
  • To:  PetSerAl

    Нет, она находится вместе с сборкой .

    

    22 июля 2013 г. 14:30
  • Нет,добавляю сам , но все равно не работает.
    Если какой нибудь способ при создании файла XML

    указывать
    где его можно сохранить ?

    • Изменено Konrud 22 июля 2013 г. 14:42 edit
    22 июля 2013 г. 14:42
  • А какой путь возвращает Directory.GetCurrentDirectory()? Разве это директория проекта? Укажите для проверки полный абсолютный путь к файлу. Будет ли возникать ошибка в этом случае?
    22 июля 2013 г. 22:00
  •         static ModelXML()
            {
                string fileNameShort = "infoFile.xml";
                string shortPathDir = "XmlDocs";
    
                // узнаю стартовый путь приложения, для примера.
                // для начала получу его процесс.
                System.Diagnostics.Process proc = System.Diagnostics.Process.GetCurrentProcess();
                // теперь по нему узнаю его стартовую папку
                string startPath = Path.GetDirectoryName(proc.MainModule.FileName);
                // вместо startPath можно указать любой путь, стартовая папка приложения указана просто для примера.
    
                // соединяю название папки XmlDocs путём до неё.
                string pathNewFull = Path.Combine(startPath, shortPathDir);
    
                // папка наверное нужна.
                if (Directory.Exists(pathNewFull) == false)
                {
                    Directory.CreateDirectory(pathNewFull);
                }
    
                // соединяю pathNewFull папку с имененм файла.
                string fileNameFull = Path.Combine(pathNewFull, fileNameShort);
    
                if (File.Exists(fileNameFull))
                    return;
    
                XmlTextWriter xmlDoc = new XmlTextWriter(fileNameFull, Encoding.UTF8);
    
                xmlDoc.WriteStartDocument();
                xmlDoc.WriteStartElement("info");
                xmlDoc.WriteEndDocument();
                xmlDoc.Close();
            } // end of ModelXML static c'tor


    нужно просто как-то указывать путь.
    В данном примере указывается как узнать путь, и куда его можно подставить (startPath или pathNewFull), если нужен другой.






    • Изменено INFEL8 23 июля 2013 г. 11:44 pathNewFull
    • Помечено в качестве ответа Konrud 3 августа 2013 г. 6:56
    23 июля 2013 г. 10:34