gpt4 book ai didi

c# - 使用 C# 将结构中的字节写入文件

转载 作者:太空宇宙 更新时间:2023-11-03 18:34:28 25 4
gpt4 key购买 nike

大家早上好!

我遇到了一个新问题。我必须记下来 self 在系统中声明的结构的数据。

我创建的结构只有两个字段,我用来稍后将其转换为字节。

[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();
}

我的问题来了,我看到我的新文件是空的,我不明白为什么它没有得到我的字节信息。我已经检查了 List 是否包含数据,我还检查了我的字节转换函数是否也能正常工作,但我无法直截了本地查看是什么导致我的文件为空。

如果有人知道隧道尽头的亮光,我将非常感谢您的帮助!

编辑 现在我有另一种方法可以将数据写入文件并且效果很好:

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);
}
}
}

最佳答案

FileStream.Write 的第三个参数是要写入 的字节数。它不应该是 0。

string saveToFilePath = "D:\\" + filename;
Stream myStream = myFtpRequest.GetRequestStream();

int bytesWritten = 0;
using (FileStream myFileStream = new FileStream(saveToFilePath, FileMode.Create))
{
foreach (MyStructData myData in myStructDataList)
{
newBuffer = getBytes(myData);
myFileStream.Write(newBuffer, 0, newBuffer.Length);
bytesWritten += newBuffer.Length;
}
}

关于c# - 使用 C# 将结构中的字节写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17338571/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com