只是为了先澄清一些事情。我不想将字节数组转换为单个字符串。我正在尝试将字节数组转换为字符串数组。
我正在使用GetClipboardData
API 从剪贴板中获取一些数据,然后将内存中的数据作为字节数组复制。当您复制多个文件(因此是CF_HDROP
剪贴板格式)时,我想将此字节数组转换为所复制文件的字符串数组。
到目前为止,这是我的代码。
//Get pointer to clipboard data in the selected format
var clipboardDataPointer = GetClipboardData(format);
//Do a bunch of crap necessary to copy the data from the memory
//the above pointer points at to a place we can access it.
var length = GlobalSize(clipboardDataPointer);
var @lock = GlobalLock(clipboardDataPointer);
//Init a buffer which will contain the clipboard data
var buffer = new byte[(int)length];
//Copy clipboard data to buffer
Marshal.Copy(@lock, buffer, 0, (int)length);
GlobalUnlock(clipboardDataPointer);
snapshot.InsertData(format, buffer);
现在,这是我之后读取缓冲区数据的代码。
var formatter = new BinaryFormatter();
using (var serializedData = new MemoryStream(buffer))
{
paths = (string[]) formatter.Deserialize(serializedData);
}
这不起作用,它会崩溃,并出现异常,指出流不包含二进制标头。我想这是因为它不知道要反序列化为哪种类型。
我已经尝试过查看Marshal
课程。似乎没有任何相关性。