【发布时间】:2014-06-09 09:43:23
【问题描述】:
我使用 C# 编写了一个应用程序来从串行端口读取数据并以十六进制字符串格式在文本框中显示数据。最后,我将所有数据保存到一个二进制文件中。如果数据很大(可能 > 20mb),则会引发内存不足错误。我该如何解决这个问题?这是我的代码:
private void btn_Save_Click(object sender, EventArgs e)
{
SaveFileDialog save_log = new SaveFileDialog();
save_log.DefaultExt = ".bin";
save_log.Filter = "Binary File (*.bin)|*.bin";
// Determine if the user selected a file name from the saveFileDialog.
if (save_log.ShowDialog() == System.Windows.Forms.DialogResult.OK &&
save_log.FileName.Length > 0)
{
try
{
string hexString = Content.Text.ToString();
FileStream stream = new FileStream(save_log.FileName, FileMode.Create, FileAccess.ReadWrite);
stream.Write(Hex_to_ByteArray(hexString), 0, Hex_to_ByteArray(hexString).Length);
stream.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
private byte[] Hex_to_ByteArray(string s)
{
s = s.Replace(" ", "");
byte[] buffer = new byte[s.Length / 2];
for (int i = 0; i < s.Length; i += 2)
{
buffer[i / 2] = (byte)Convert.ToByte(s.Substring(i, 2), 16);
}
return buffer;
}
【问题讨论】:
-
如果您有从串口读取的数据(可能是
byte[]格式),为什么不保留它并在需要时将其写入文件?这样,您不必将十六进制字符串转换回二进制。 -
这是个好主意,但它不能解决我的问题。
-
不要自己做所有事情。使用
encoding。这个来源可能会帮助你codeproject.com/Questions/695963/…