大家,早安!
我在这里遇到了一个新问题。我必须写下来自我在系统中声明的结构的数据。
我创建的结构只有两个字段,我用来稍后将其转换为字节。
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
public struct MyStructData
{
public short Id;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 20)]
public string Name;
}
我使用以下代码将此结构转换为字节:
private byte[] getBytes(MyStructData aux)
{
int length = Marshal.SizeOf(aux);
IntPtr ptr = Marshal.AllocHGlobal(length);
byte[] myBuffer = new byte[length];
Marshal.StructureToPtr(aux, ptr, true);
Marshal.Copy(ptr, myBuffer, 0, length);
Marshal.FreeHGlobal(ptr);
return myBuffer;
}
这个函数用于转换 MyStructData 类型元素的 List 结构中的每个元素,其中我有我想要发送到另一台机器的所有寄存器,我使用下面粘贴的代码来执行此操作:
string saveToFilePath = "D:\\" + filename;
Stream myStream = myFtpRequest.GetRequestStream();
using (FileStream myFileStream = new FileStream(saveToFilePath, FileMode.Create))
{
foreach (MyStructData myData in myStructDataList)
{
int length = 2048;
byte[] newBuffer = new byte[length];
newBuffer = getBytes(myCust);
int len = 0;
int bytesRead = 0;
myFileStream.Write(newBuffer, 0, len);
bytesRead += len;
}
myFileStream.Close();
}
我的问题是我看到我的新文件是空的,我看不出为什么它没有得到我的字节信息。我已经检查了列表是否带有数据,并且我还检查了我的字节转换功能是否也能正常工作,但我无法直截了当地查看导致我的文件为空的原因。
如果有人知道隧道尽头的光,我将非常感谢您的帮助!
编辑现在我有另一种方法将数据写入文件并且效果很好:
using (Stream stream = new FileStream(saveToFilePath, FileMode.Create, FileAccess.Write, FileShare.ReadWrite))
{
using (BinaryWriter writer = new BinaryWriter(stream, Encoding.Default))
{
// get all data
foreach (MyStructData myData in myStructDataList)
{
byte[] newBuffer = getBytes(cd);
writer.Write(newBuffer);
}
}
}