将二进制文件字节写入剪贴板

时间:2013-04-19 16:10:30

标签: vb.net

我正在尝试读取二进制文件,将其转换为字符串,然后将其写入磁盘。

基本上这是我的代码

Dim bytes As Byte() = System.IO.File.ReadAllBytes("C:\1.exe")
Clipboard.SetText(bytes.ToString)
System.IO.File.WriteAllBytes("C:\2.exe", bytes)

它在读/写文件中工作,但它无法将字节复制到剪贴板,我得到的是剪贴板上的“System.Byte[]”所以我怎样才能读取一些二进制文件字节并存储它们/复制到剪贴板?

3 个答案:

答案 0 :(得分:2)

当您使用Clipboard.SetText()时,您应该将 text 放在剪贴板上。 EXE文件不包含文本,它包含程序。尝试用记事本打开你的1.exe文件,看看它是什么样的。不是文字。

可以将二进制文件放在剪贴板上。这看起来像这样:

    Dim files = New String() {"c:\windows\notepad.exe"}
    Clipboard.SetData(DataFormats.FileDrop, files)

现在切换到Windows资源管理器并按Ctrl + V.你有一份Notepad.exe

如果您只想要文件的副本,请使用File.Copy():

    System.IO.File.Copy("c:\1.exe", "c:\2.exe")

这不只是复制文件中的字节,还可以确保正确设置文件的属性。

答案 1 :(得分:1)

您需要将字节转换为字符串:

Dim text as String = System.Text.Encoding.UTF8.GetString(bytes)
Clipboard.SetText(bytes.ToString)

然而,正如Neolisk所提到的那样,这实际上并没有帮助,因为你真的在读二进制文件而不是文本文件

答案 2 :(得分:1)

bytes.ToString

获取数组的字符串表示形式,而不是其内容。引用类型从ToString()返回其typename,除非它们覆盖它以执行不同的操作。

您真正想做的是字节数组转换为字符串。为此,使用Encoding.GetString(bytes) - 您需要使用Encoding的静态成员(如Encoding.UTF8作为适当的实例 - 取决于您的字节编码的字符串的表示形式。

编辑#1 :我实际上没有注意到你在阅读什么。您期望可执行文件的文本表示是什么?把它放在剪贴板上有什么意义?