保存和加载信息的最简单方法c#
Posted
技术标签:
【中文标题】保存和加载信息的最简单方法c#【英文标题】:Simplest way to save and load information c# 【发布时间】:2016-08-04 14:59:55 【问题描述】:我有一个 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 序列化器/反序列化器之一?为什么要重新发明***? 以上代码与WPF无关。 最好更具体。发生任何异常,您是否调试过,您究竟要保存到什么位置? 【参考方案1】:你说的“不工作”有点不清楚,但我建议你只使用标准的 .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 个写入都是异步的,并且在另一个之后立即触发;不能保证当你开始下一个时前一个会完成。我什至不清楚您是否保证以特定顺序编写行(您在反序列化逻辑中认为是这种情况)。您也完全有可能(实际上很可能)在写操作的过程中关闭文件。
我还建议为文件流设置一个“使用”块。
【讨论】:
以上是关于保存和加载信息的最简单方法c#的主要内容,如果未能解决你的问题,请参考以下文章
将数据从父表和子表加载到 DataGridView 的最简单方法,可以进行排序
使用 C# 从 RTMP 服务器获取和播放音频流的最简单方法是啥?