我正在尝试读取二进制文件,将其转换为字符串,然后将其写入磁盘。
基本上这是我的代码
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[]
”所以我怎样才能读取一些二进制文件字节并存储它们/复制到剪贴板?
答案 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 :我实际上没有注意到你在阅读什么。您期望可执行文件的文本表示是什么?把它放在剪贴板上有什么意义?