Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 将二进制文件字节写入剪贴板_Vb.net - Fatal编程技术网

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

Vb.net 将二进制文件字节写入剪贴板,vb.net,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[]”。。那么,如何读取一些二进制文件

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

基本上这是我的代码

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[]
”。。那么,如何读取一些二进制文件字节并将其存储/复制到剪贴板?

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

Dim text as String = System.Text.Encoding.UTF8.GetString(bytes)
Clipboard.SetText(bytes.ToString)
然而,正如Neolik提到的,这并没有真正的帮助,因为您实际上是在读取二进制文件,而不是文本文件

bytes.ToString
获取数组的字符串表示形式,而不是其内容。引用类型从ToString()返回其类型名,除非它们重写它以执行其他操作

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


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

使用剪贴板时。SetText()则应将文本放在剪贴板上。EXE文件不包含文本,它包含一个程序。试着用记事本打开你的1.exe文件,看看它是什么样子。不是文本

您可以将二进制文件放在剪贴板上。可能是这样的:

    Dim files = New String() {"c:\windows\notepad.exe"}
    Clipboard.SetData(DataFormats.FileDrop, files)
现在切换到Windows资源管理器并按Ctrl+V。您已获得Notepad.exe的副本

如果只需要文件的副本,请使用file.copy():


它不仅复制文件中的字节,还确保文件的属性设置正确。

您说“它无法将字节复制到剪贴板,我得到的是
System.Byte[]
”。你还希望得到什么?文件本身。我仍然是编程界的头号人物,所以我错过了什么吗。是否可以将字节存储在文本文件中?一旦文件放在剪贴板上,您打算如何处理该文件?创建
2.exe
当然不需要将它们放在那里。我想将字节存储在应用程序中,然后将这些字节写入磁盘上的二进制文件中。不要获取它。你为什么还需要剪贴板?如果你想把它转换成一个字符串,为什么要给它一个exe扩展名,它肯定不会执行,除非你把它转换回来。我想把字节存储在应用程序中,然后把这些字节写入磁盘上的二进制文件中。(磁盘上没有1.exe)我的主要目标是在应用程序中存储1.exe字节,然后将其写入桌面。如果没有
1.exe
,那么“存储”是什么意思?文件字节是什么?请更清楚地解释你想做什么。我的意思是:我想将“1.exe”字节存储为字符串/字节数组,然后将其写入desk。我不想先读后写剪贴板和它有什么关系?你为什么要在原始样本中包含这个?我看不出这与你的问题有什么关系。好吧,我如何将字节存储在字符串中,然后写入桌面?我不想复制它,我想在1.exe不存在的情况下将2.exe写入桌面。我不知道“将2.exe写入桌面”可能意味着什么。如果要将文件复制到桌面,请使用Environment.GetFolderPath()获取路径。
    System.IO.File.Copy("c:\1.exe", "c:\2.exe")