大家早上好!將結構中的字節寫入c文件中#
我在這裏遇到一個新問題。我必須寫下來自我在系統中聲明的結構的數據。
我創建的結構只有兩個字段,我用它來稍後將其轉換爲字節。
[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類型元素的列表結構的內部變換,其中我有所有我想要的寄存器發送到另一臺機器,和我一起粘貼下面的代碼做到這一點:
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);
}
}
}
當我在代碼中寫入第二行時,它給了我一個錯誤。它將void函數寫入myFileStream中,因此它根本不返回任何int值。 –
對不起,我編輯了答案。 –
謝謝!這工作得很好,現在我去我的下一個問題,所以我希望我不打擾你們所有 –