2016-08-04 4 views
-3

У меня есть приложение WPF C#. Мне нужно это, чтобы иметь возможность сохранять «Продукты». Эти продукты будут иметь имя продукта, имя клиента и местоположение прошивки. Это мой текущий код для сохранения и загрузки, но он не работает. Я имею в виду попробовать другой подход ко всему этому вместе:Самый простой способ сохранить и загрузить информацию C#

public class Product 
{ 
    private string productName; 
    private string customerName; 
    private string firmwareLocation; 

    public string getProductName() 
    { 
     return productName; 
    } 

    public bool setProductName(string inputProductName) 
    { 
     productName = inputProductName; 
     return true; 
    } 

    public string getCustomerName() 
    { 
     return customerName; 
    } 

    public bool setCustomerName(string inputCustomerName) 
    { 
     customerName = inputCustomerName; 
     return true; 
    } 

    public string getFirmwareLocation() 
    { 
     return firmwareLocation; 
    } 

    public bool setFirmwareLocation(string inputFirmwareLocation) 
    { 
     inputFirmwareLocation = firmwareLocation; 
     return true; 
    } 

    public Product(string inProductName, string inCustomerName, string inFirmwareLocation) 
    { 
     inProductName = productName; 
     inCustomerName = customerName; 
     inFirmwareLocation = firmwareLocation; 
    } 

    public void Save(TextWriter textOut) 
    { 
     textOut.WriteLineAsync(productName); 
     textOut.WriteLineAsync(customerName); 
     textOut.WriteLineAsync(firmwareLocation); 
    } 

    public bool Save(string filename) 
    { 
     TextWriter textOut = null; 
     try 
     { 
      textOut = new StreamWriter(filename); 
      Save(textOut); 
     } 
     catch 
     { 
      return false; 
     } 
     finally 
     { 
      if (textOut != null) 
      { 
       textOut.Close(); 
      } 
     } 

     return true; 
    } 

    public static Product Load (string filename) 
    { 
     Product result = null; 
     System.IO.TextReader textIn = null; 

     try 
     { 
      textIn = new System.IO.StreamReader(filename); 
      string productNameText = textIn.ReadLine(); 
      string customerNameText = textIn.ReadLine(); 
      string firmwareLocationText = textIn.ReadLine(); 
      result = new Product(productNameText, customerNameText, firmwareLocationText); 
     } 
     catch 
     { 
      return null; 
     } 
     finally 
     { 
      if (textIn != null) textIn.Close(); 
     } 
     return result; 
    } 
} 

}

+8

«Как бы он не работал» «Почему он не работает? –

+2

Определите «не работает». Можете быть более конкретными? Что вы ожидаете и что на самом деле происходит? Кроме того, почему вы не используете один из стандартных сериализаторов/десериализаторов .NET для этого? Зачем изобретать колесо? – EJoshuaS

+3

Код выше не имеет ничего общего с WPF. – mechanic

ответ

2

Это немного непонятно, что значит «не работает», но я хотел бы предложить, что вы просто использовать стандарт. NET для сериализации/десериализации библиотек, вместо того, чтобы пытаться изобретать колесо. Здесь не нужно ничего делать. См. Следующее: https://msdn.microsoft.com/en-us/library/mt656716.aspx

В качестве побочного примечания, почему вы используете методы getX() и setX() вместо свойств? Это не стандартный C#. Например, следующее:

private string productName; 

public string getProductName() 
{ 
    return productName; 
} 

public bool setProductName(string inputProductName) 
{ 
    productName = inputProductName; 
    return true; 
} 

должен быть

public string ProductName 
{ 
    get; 
    set; 
} 

Я предполагаю, что одна из причин, почему ваш код не работает в том, что она имеет несколько впиваясь условия гонки. Например, все три ваши записи являются асинхронными и запускаются сразу после другого; нет гарантии, что предыдущий будет выполнен, когда вы начнете следующий. Мне даже не ясно, что вы гарантированно напишите строки в определенном порядке (что вы считаете правильным в своей логике десериализации). Также вполне возможно (вероятно, на самом деле), что вы закроете файл в середине операций записи.

Я также предложил бы «использовать» блок для файловых потоков.

Смежные вопросы