Member 14672509 Ответов: 2

Консольное приложение - исключение при нажатии кнопки Сохранить в C# WPF


Я использую приложение Windows в WPF C# Lang во встроенном поле. а консольное окно предназначено только для операторов печати. Писал программу в XML-значение нагрузки в ListBox и сохранить элементы списка в XML пути. Listbox возьмите элементы из текстового поля. при нажатии кнопки добавить элемент текстового поля добавляется в список. когда я нажимаю кнопку Сохранить 1-й элемент списка будет сохранен в xml-файле, а затем элемент будет сохранен в плате [приложение, связанное с IOT]

теперь моя проблема заключается в следующем : когда я нажимаю на кнопку Сохранить данные сохраняются в XML-файле, но не сохраняются в плате, я получаю какое-то исключение, и приложение автоматически закрывается. Получение Исключения, Как Это :
at System.IO.Filestream.Init(String Path, FileMode mode, FileAccess Access, Int32 rights, boolean useRights, FileStream Share, int32 buffersize, fileoption option, SECURITY_ATTRIBUTES secattrs, string msgPath, boolean bFfromProxy, boolean uselongpath, boolean checkhost)
at System.IO.FileStream..cattr(StringPath, FileMode, fileacces access, FileShare share, Int32 bufferSize)
at System.XML.xmldownloadmanager.getstream(Uri uri,ICredentials credentials, IWebProxy Proxy, REquestCachePolicy Cachepoliy)at System.XML.xmlURLResolver.getentity(Uri absoluteuri, string role, type ofobjectToReturn)
at System.Xml.xmltextReaderImpl.FinishInItUriString()
at System.Xml.xmlREaderSettings.CreateReader(String input uri, XmlParserContext Inputcontext)
at System.Xml.Linq.xElement.Load(String uri.LoadOption LoadOption)at MainWindow.Button_Click(object sender, Routed EventArgs e)
at System.Windows.EventRoute.InvokehandlerImpl(Objext Source, RoutedEventArgs Args, Boolean reRaise)
at System.Windows.UIElement.RaiseEventImpl(DependencyObject Sender, RoutedEventArgs Args)
at System.Windows.Control.Premitives.buttonbase.OnClick()at System.Windows.Control.Button.OnClick()
at System.Windows.Control.Primitives.ButtonBase. OnmouseLeftButtonUp(MouseButtonEventArgs E)
at System.Windows.RoutedEventArgs.InvokeHandlers(Deleget Handler, ObjectTarget)
at System.Windows.EventRoute.InvokeHandlerImpl(Object Source, RoutedEventArgs Args, Boolean ReRaised)
at System.Windows.UIElement.ReRaiseEventAs(DependencyObject Sender, RoutedEventArgs Args, RoutedEvent NewEvent)
at System.Windows.UIElement.OnMouseUPThunk(Object Sender, MouseButtonEventArgs e)
at System.Windows.RoutedEventArgs.InvokeHandler(Delegete Handler, Object Target)
at System.Windows.RoutedEventHandlerInfo invokeHandler(Object target, RoutedEventArgs RoutedEventargs)
at System.Windows.EventRoute.InvokeHandlerImpl(Object Source, RoutedEventArgs Args, Boolean Reraised)
at System.Windows.UIElement.RaiseEventImpl(DependencyObject Sender, RoutedEventArgs Args)
at System.Windows.UIElement.RaiseTrustedEvent (RoutedEventArgs Args)
at System.Windows.Input.InputManager.ProcessStageingArea()
at System.Windows.Input.InputManager.ProcessInput (InoutEventArgs Input)
at System.Windows.Input.InputProviderSite.ReportInput (InputReport inputreport)


Что я уже пробовал:

Мой код таков :
private void LoadXML_Click(object sender, RoutedEventArgs e)
{
    XElement element = XElement.Load("WH_Num.xml");
    foreach (XElement item in element.Elements("Number1"))
        ListBox_PhoneNumber.Items.Add(item.Value);
    foreach (XElement item in element.Elements("Number2"))
        ListBox_PhoneNumber.Items.Add(item.Value);
    foreach (XElement item in element.Elements("Number3"))
        ListBox_PhoneNumber.Items.Add(item.Value);
    foreach (XElement item in element.Elements("Number4"))
        ListBox_PhoneNumber.Items.Add(item.Value);
    foreach (XElement item in element.Elements("Number5"))
      
    MessageBox.Show("Number Loaded to XML");
}

private void SAVEXML_Click(object sender, RoutedEventArgs e)
{
    try
    {
        information info = new information();
        if (ListBox_PhoneNumber.Items.Count > 0) info.Number1 = ListBox_PhoneNumber.Items[0].ToString();
        if (ListBox_PhoneNumber.Items.Count > 1) info.Number2 = ListBox_PhoneNumber.Items[1].ToString();
        if (ListBox_PhoneNumber.Items.Count > 2) info.Number3 = ListBox_PhoneNumber.Items[2].ToString();
        if (ListBox_PhoneNumber.Items.Count > 3) info.Number4 = ListBox_PhoneNumber.Items[3].ToString();
        if (ListBox_PhoneNumber.Items.Count > 4) info.Number5 = ListBox_PhoneNumber.Items[4].ToString();
      

        SaveXML.savedata(info, "WH_Num.xml");
        MessageBox.Show("Data Saved");
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }

// THIS CODE IS FOR SAVE DATA IN BOARD LEVEL
    string Number1 = string.Empty;
    string Number2 = string.Empty; 
    string Number3 = string.Empty; 
    string Number4 = string.Empty; 
    string Number5 = string.Empty; 
    if (ListBox_PhnNumbr.Items.Count > 0) Number1 = ListBox_PhnNumbr.Items[0].ToString();
    if (ListBox_PhnNumbr.Items.Count > 1) Number2 = ListBox_PhnNumbr.Items[1].ToString();
    if (ListBox_PhnNumbr.Items.Count > 2) Number3 = ListBox_PhnNumbr.Items[2].ToString();
    if (ListBox_PhnNumbr.Items.Count > 3) Number4 = ListBox_PhnNumbr.Items[3].ToString();
    if (ListBox_PhnNumbr.Items.Count > 4) Number5 = ListBox_PhnNumbr.Items[4].ToString();
    MessageBox.Show("SOTA Configuration Saved Successfully"); 
    return new SOTA_whitelist_Number(Number1, Number2, Number3, Number4, Number5)
}

Где я пропадаю? Почему грядет это исключение? Кто-нибудь мне поможет

Функция SaveXML выглядит следующим образом:
class SaveXML
{
    public static void savedata(object obj, string filename)
    {
        XmlSerializer sr = new XmlSerializer(obj.GetType());
        TextWriter writer = new StreamWriter(filename);
        sr.Serialize(writer, obj);
        writer.Close();
    }
}

2 Ответов

Рейтинг:
1

Garth J Lancaster

(1) я не верю, что вам нужен текстовый редактор

(2)

Цитата:
писатель.Закрывать();
просто в наши дни это так устарело - даже для такого Бумера, как я, - "использование" - это путь, так что попробуйте вот это

XmlSerializer serializer = new XmlSerializer(obj.GetType());
using (StreamWriter writer = new StreamWriter(filename))
{
    serializer.Serialize(writer, obj);
}


Рейтинг:
0

OriginalGriff

Цитата:
я получаю какое-то исключение
Ничего не говорит нам - мы знаем, что вы получаете исключение, но фактическое сообщение об ошибке, вероятно, важно - есть много возможных исключений, и все они, как правило, имеют разные причины.

И это, вероятно, связано с вашими данными и / или файловой системой, а также с вашим кодом, и у нас нет доступа ни к тому, ни к другому.

Так что все будет зависеть от тебя.
К счастью, у вас есть инструмент, который поможет вам выяснить, что происходит: отладчик. Если вы не знаете, как его использовать, то быстрый Google для "Visual Studio debugger" должен дать вам необходимую информацию.

Поместите точку останова в первую строку функции и запустите код через отладчик. Затем посмотрите на свой код и на свои данные и определите, что должно произойти вручную. Затем по одному шагу в каждой строке проверяйте, что то, что вы ожидали, произойдет именно так, как и произошло. Когда это не так, тогда у вас есть проблема, и вы можете вернуться назад (или запустить ее снова и посмотреть более внимательно), чтобы выяснить, почему.

Извините, но мы не можем сделать это за вас - пришло время вам освоить новый (и очень, очень полезный) навык: отладку!


Garth J Lancaster

бвггер ! где эта скрытая камера ;-) .. теперь, когда ты проснулся, я просто уйду на целый день