最初に何かを明確にするためだけに。バイト配列を単一の文字列に変換しようとはしていません。バイト配列を文字列配列に変換しようとしています。
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
クラスを調べてみました。関連性はないようです。