保存和加载信息的最简单方法c#

本文关键字:最简单 方法 信息 加载 保存 | 更新日期: 2023-09-27 18:00:09

我有一个WPF 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;
    }
}

}

保存和加载信息的最简单方法c#

您所说的"不工作"是什么意思还不清楚,但我建议您只使用标准的.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;
}

我猜你的代码不工作的原因之一是它有多个明显的竞争条件。例如,您的所有3个写入都是异步的,并且一个接一个地被触发;当你开始下一个时,不能保证上一个会完成。我甚至不清楚是否保证按特定顺序写入行(在反序列化逻辑中,情况就是这样)。在写操作过程中关闭文件也是完全可能的(实际上很可能)。

我还建议对文件流使用"using"块。