首先澄清一些事情。我不是试图将字节数组转换为单个字符串,而是尝试将字节数组转换为字符串数组。
我正在使用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 类,但似乎都没有相关的信息。
Clipboard.GetFileDropList()
? - GSerg