Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Не работает код на XP sp3


Автор: DenWPF 19.3.2010, 23:55
на одной xp работает..а вот у клиента блин нет=((
фреймворк 3.0
пишет что нет 
p.Children[1] as ListBox; - 0 элемент, но это не так, как и визуально так и программно.
Код

 TextBlock t = sender as TextBlock;
                StackPanel p = t.Parent as StackPanel;
                ListBox sublist = p.Children[1] as ListBox;
                StackPanel sublist2 = p.Children[2] as StackPanel;
                if (sublist.Visibility == Visibility.Collapsed)
                {
                    sublist.Visibility = Visibility.Visible;
                    sublist2.Visibility = Visibility.Visible;
                }
                else
                {
                    sublist.Visibility = Visibility.Collapsed;
                    sublist2.Visibility = Visibility.Collapsed;
                }

Автор: DenWPF 21.3.2010, 01:00
не понятным способом это решили.

но вот трабл теперь другой, почему то из программы в некоторых случаях не сохраняет в хмл, а в не которых сохраняет, хотя используется одна и таже функция.

Автор: Экскалупатор 21.3.2010, 11:24
скорее всего мы рассматриваем сферический компьютер в вакууме, который исполняет некий абстрактный код. попробуй просто отследить под Debag куда там деваются элементы и почему не срабатывает запись в файл. возникает ли при этом ошибка(которая может отлавливаться где то в другом месте, и по этому не видно что она возникла), или проблема с правами на запись файлов. мне кажется что код падает до или во время записи и по этому иногда пишет а иногда нет. надо искать ошибку.

Автор: Exai1e 21.3.2010, 11:50
DenWPF, сделай отдельную копию, с большим try catch в местах которые вызывают проблему (например запись в xml) и записью exception в лог файл, потом посмотри на исключение, или попробуй удаленную отладку (если есть возможность, вроде VS20xx поддерживает данную возможность)) ну или как сказал Экскалупатор, запускать код под дебагером у клиента

Автор: DenWPF 22.3.2010, 14:22
клиент удаленный. хотя надо это как то по пробовать.

клиент переустраивал систему - все гуд

Автор: DenWPF 23.3.2010, 03:38
блин, опять теже проблемы. весь код в catch try и не чего не выводит.

Автор: Dobermann 23.3.2010, 11:05
Ну так саму ошибку покажи!

Автор: DenWPF 23.3.2010, 12:56
так нет ошибки,  она просто не сохраняется

Автор: Экскалупатор 23.3.2010, 19:18
значит ошибка есть. ты просто ее не видишь. покажи код который работает с файлом.

Автор: DenWPF 24.3.2010, 20:29
ложная инфа. сори

Автор: DenWPF 24.3.2010, 21:44
так тут ниже.
XmlDocument xmlDoc = new XmlDocument();
запись в переменную
потом я её вывожу на экран и она правельно изменена.
xmlDoc.Save(Directory.GetCurrentDirectory() + "\\People1.xml");

не сохраняет в ХП  в вин7 работает.

аналог есть ?


как записать в файл стринг но что бы если файл занят попробывать ещё раз.

Автор: MasterOfCode 25.3.2010, 12:50
Цитата(DenWPF @  24.3.2010,  23:44 Найти цитируемый пост)
xmlDoc.Save(Directory.GetCurrentDirectory() + "\\People1.xml");

Может на том компьютере запускают программу не со своего компьютера, а с сетевого хранилища. У меня была такая проблема, решилось копированием программы на диск. Либо можно просто в настройках (Панель упраления-администрирование-MS .NET Config-Runtime Security Policy) поставить Full Trust на запуск программ из сети.

Автор: DenWPF 25.3.2010, 14:58
нет, программа на диске.

 smile 

полный код
уже поменял                  
using (StreamWriter sw = new StreamWriter(Directory.GetCurrentDirectory() + "\\People1.xml", false, enc))
                 {
                      sw.WriteLine(xmlDoc.InnerXml);
                 }

тоже не работает...


Код

        static object xmlobj = new object();
        private static void ClassToXml()
        {
            try
            {
                lock (xmlobj)
                {
                    // Creating new XML document
                    XmlDocument xmlDoc = new XmlDocument();

                    // Creating and adding XML declaration
                    XmlDeclaration xmlDeclaration = xmlDoc.CreateXmlDeclaration("1.0", "UTF-8", null);
                    xmlDoc.InsertBefore(xmlDeclaration, xmlDoc.DocumentElement);

                    // Creating and adding the root node
                    XmlElement rootNode = xmlDoc.CreateElement("Comments");
                    xmlDoc.AppendChild(rootNode);

                    // Creating and adding the child node "Person"
                    foreach (ListFile u in books)
                    {
                        XmlElement parentNode = xmlDoc.CreateElement("Person");
                        parentNode.SetAttribute("Name", u.Name);


                        XmlElement parentNode2 = xmlDoc.CreateElement("Tasks");
                        parentNode.AppendChild(parentNode2);

                        xmlDoc.DocumentElement.PrependChild(parentNode);
                        // Proccesing all tasks
                        XmlElement parentTaskNode = xmlDoc.CreateElement("Task");
                        XmlElement taskNameNode = xmlDoc.CreateElement("Name");

                        foreach (Task t in u.Tasks)
                        {
                            taskNameNode = xmlDoc.CreateElement("Name");
                            XmlElement timeNode = xmlDoc.CreateElement("Time");

                            // Proccesing all TimeList of current task
                            foreach (TimeList time in t.timeList)
                            {
                                XmlElement tickNode;
                                XmlElement dayNode = xmlDoc.CreateElement("Day");
                                dayNode.SetAttribute("Name", time.TitleTime);
                                dayNode.SetAttribute("Count", time.count);

                                // Proccesing all time.time of current TimeList

                                foreach (string s in time.time)
                                {
                                    tickNode = xmlDoc.CreateElement("Tick");
                                    tickNode.InnerText = s;
                                    dayNode.AppendChild(tickNode);
                                }
                                timeNode.AppendChild(dayNode);
                            }
                            parentTaskNode.AppendChild(timeNode);
                            taskNameNode.InnerText = t.Name;
                            //Запись Status
                            taskNameNode.SetAttribute("Status", t.Status.ToString());

                            // URLS nodes
                            XmlElement urlsNode = xmlDoc.CreateElement("Urls");
                            if (t.Url != null)
                                foreach (string url in t.Url)
                                {
                                    XmlElement urlNode = xmlDoc.CreateElement("Url");
                                    urlNode.InnerText = url;
                                    urlsNode.AppendChild(urlNode);
                                }

                            // Message (<Message path="Task.Message" />)
                            XmlElement msgNode = xmlDoc.CreateElement("Message");
                            msgNode.SetAttribute("path", t.Message);
                          //  MessageBox.Show(msgNode.Attributes[0].Value);
                            parentTaskNode.PrependChild(msgNode);
                           // MessageBox.Show("msgNode  -  " + parentTaskNode.InnerXml);
                            parentTaskNode.PrependChild(urlsNode);
                           // MessageBox.Show("urlsNode  -  " + parentTaskNode.InnerText);
                            parentTaskNode.PrependChild(taskNameNode);
                           // MessageBox.Show("taskNameNode  -  " + parentTaskNode.InnerText);

                            parentNode2.AppendChild(parentTaskNode);
                            parentTaskNode = xmlDoc.CreateElement("Task");
                        }
                    }


                    //this.MainList.ItemsSource = books;
                    //this.MainList.Items.Refresh();
                 MessageBox.Show(xmlDoc.InnerXml);
                 //XmlTextWriter myXmlTextWriter = new XmlTextWriter(Directory.GetCurrentDirectory() + "\\People1.xml", System.Text.Encoding.UTF8);
                   // MessageBox.Show(Directory.GetCurrentDirectory() + "\\People1.xml");
                 //   if (Directory.Exists(Directory.GetCurrentDirectory() + "\\People1.xml") == true)
                    //    MessageBox.Show("Есть");
                 using (StreamWriter sw = new StreamWriter(Directory.GetCurrentDirectory() + "\\People1.xml", false, enc))
                 {
                      sw.WriteLine(xmlDoc.InnerXml);
                 }
                   // xmlDoc.Save(Directory.GetCurrentDirectory() + "\\People1.xml");
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message + "  ||| ClassToXml - Error ");
            }
        }

Автор: DenWPF 27.3.2010, 17:45
почему может не работает?
using (StreamWriter sw = new StreamWriter(Directory.GetCurrentDirectory() + "\\People1.xml", false, enc))
                 {
                      sw.WriteLine(xmlDoc.InnerXml);
                 } 
в хп??? 
хелп

Автор: nikitao 27.3.2010, 19:15
Я верно понимаю, что код никаких Exception не выдает , а просто проходит по этим строчкам и не сохраняет файл в ожидаемое место, после чего успешно продолжает исполнение ? Если да , то попробуй Directory.GetCurrentDirectory() на экран что ли вывести или поменять на "C:\\People1.xml"... идиотизм конечно , но вдруг куда то сохраняет, но не туда куда ты хотел.

зы всю тему только мельком просмотрел.

Автор: DenWPF 27.3.2010, 20:56
да, проверял я путь. верный.

решил проблему таким способом, перед юзингом xmlDoc.InnerXml приравнял к переменной и е ё записал.

Автор: MasterOfCode 28.3.2010, 08:14
...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)