保存和加载信息的最简单方法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;
}
}
}
您所说的"不工作"是什么意思还不清楚,但我建议您只使用标准的.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"块。