后台:我正在使用ADODB连接提取保存在SQL数据库中的文件。数据库的一列是文件名,包括文件扩展名,另一列是文件的实际内容,作为十六进制流。我想保存此文件并将其打开。
问题:这适用于.pdf文件。但是,使用.png文件时出现错误 - 当我尝试打开文件时文件已损坏。我使用了十六进制编辑器(HxD)并注意到有多余的值。如果我删除这些文件打开正常。十六进制流应以“per mille”字符(excel中的Chr(137))开头,以便打开文件。我还没有找到一种方法来编辑excel中的十六进制流而不将其转换为字符。
当我使用十六进制编辑器取出前几个字符时,.png文件打开没有问题,因此文件以:
开头 ‰PNG
或十六进制代码中的等价物:
89 50 4E 47
多余的字符是
ÿþ
或十六进制代码中的等价物:
FF FE
(我想删除这些)。即使我使用
从文本字符串中删除4个字符,这些字符也在保存的文件中Content = Right(Content, Len(Content) - 4)
当我保存文件时,它几乎就像在字符串之前自动添加一样。
代码:
调用save to file函数,其中Content是文件内容,Name是文件名:
Call StringToTextFile("C:\", rst![Content], rst![Name])
功能如下:
Public Sub StringToTextFile(ByVal directory As String, ByVal Content As String, ByVal filename As String)
'Requires reference to scrrun.dll
Dim fso As Scripting.FileSystemObject
Dim ts As Scripting.TextStream
Set fso = New Scripting.FileSystemObject
If Right(filename, 4) = ".png" Then 'recognizing the .png file
'Content = CByte(Chr(137)) & Right(Content, Len(Content)) 'unsuccessful attempt at inserting "per mille" character
'iret = InStr(0, Chr(137), Content, vbBinaryCompare) 'unsuccessful attempt at finding the "per mille" character in the content
End If
Set ts = fso.CreateTextFile(directory & filename, True, True)
ts.Write Content
ts.Close
Dim myShell As Object
Set myShell = CreateObject("WScript.Shell")
myShell.Run directory & filename 'Open the saved file
End Sub
当我尝试使用Chr(137)插入“per mille”字符时,它只是在十六进制编辑器中显示一个空格。
任何帮助表示赞赏!
这似乎是类似的讨论,但我不确定如何将此应用于我的案例: excel-vba-hex-to-ascii-error