level 7
比如 我用二进制打开1.bmp 文件得到一串数字。然后我把这串数字复制到别的地方,再保存为1.bmp,还能正常打开这张图片吗?我要怎么保存这串数字才能正常打开这个文件?
注意;文件不一定是图片,有可能是别的文件。关键点是如何保存得到的这串数字,才能以之前的打开方式正常打开?
哎~希望我说明白了,
2022年09月13日 15点09分
1
level 7
我不要代码,路过的大神给我个思路就行,或者 我这想法就是错的?
2022年09月13日 15点09分
2
level 6
这个很简单呢,把这个图片转成二进制文件保存在SQL里面,然后再读出来到临时目录显示出来,我现在的软件就是这样处理的。
2022年09月13日 23点09分
4
我不需要保存在sql里,也不需要临时显示,我可以把二进制数字保存在多个记事本里都行,主要问题是分开后能不能还原的问题,楼上的已经说清楚了。应该是可以的。
2022年09月15日 01点09分
如果是 1G大文件转成二进制存入数据库大概需要多久?
2022年09月17日 08点09分
@97000946 今天试了一下,搞了一部电影过去,差不多1.5G的两分钟。
2022年09月19日 09点09分
@i粝 这速度还是可以的
2022年09月19日 12点09分
level 6
保存成记事本文件,我这个我倒没试过,因为我们是直接直接存在SQL里面调用的。理论上应该可以,因为原理都差不多。
2022年09月15日 01点09分
5
当然不可以,保存到记事本就是文本文件了(ascii编码)。必须按照二进制保存。当然底层都是二进制,系统层通过不同的程序读取文件会区别对待,去记事本读就会按照ascii解码,用16进制读文本文件会按照2进制直接读取,不会解码。自然也就看不到文本内容了,只能看到2进制对应的16进制内容。
2022年09月25日 02点09分
level 6
我给你代码吧
'读文件保存到数据库
'sKZMField 扩展名字段,如果为空,则不必保存扩展名
Public Function lSaveFromFile(ByRef oConnT As ADODB.Connection, _
ByVal sTableName As String, _
ByVal sIDField As String, _
ByVal lIDValue As Long, _
ByVal sTXField As String, _
ByVal sFileName As String, _
ByVal sKZMField As String) As Long
Dim Rs As ADODB.Recordset
Dim lFileNumber As Long '文件号
Dim Chunks As Long '数据块数
Dim ChunkAry() As Byte '数据块数组
Dim CHUNKSIZE As Long '数据块大小
Dim Fragment As Long '零碎数据大小
Dim i As Long '计数器
Dim DataLen As Long
Dim sKZM As String
'On Error GoTo ErrorHandle
Set Rs = New ADODB.Recordset
Rs.CursorLocation = adUseClient
Rs.Open "select " & sTXField & IIf(sKZMField = "", "", ", " & sKZMField) & " " & vbCrLf & _
"from " & sTableName & " " & vbCrLf & _
"where " & sIDField & "=" & lIDValue, _
oConnT, adOpenKeyset, adLockOptimistic
lSaveFromFile = 0
CHUNKSIZE = 8192
If sKZMField = "" Then
Else
sKZM = sExtractKZM(sFileName)
Rs.Fields(sKZMField) = sKZM
End If
lFileNumber = FreeFile '产生随机的文件号
If InStr(sFileName, ":") > 0 Or InStr(sFileName, "\\") > 0 Then
Open sFileName For Binary Access Read As lFileNumber '打开图像文件
ElseIf sFileName = "" Then
Rs.Fields(sTXField) = ""
Rs.Update
Exit Function
Else
Open App.Path & "\" & sFileName For Binary Access Read As lFileNumber '打开图像文件
End If
DataLen = LOF(lFileNumber) '获得文件长度
'这段代码应该不用吧,要保存文件,为NULL没有关系
' If IsNull(Rs.Fields(sTXField)) Then Exit Function
If DataLen = 0 Then '文件长度为0
Rs.Update
Close lFileNumber
lSaveFromFile = 0
Exit Function
End If
Chunks = DataLen \ CHUNKSIZE '数据块的个数
Fragment = DataLen Mod CHUNKSIZE
If Fragment > 0 Then '先写零碎数据
ReDim ChunkAry(Fragment - 1)
Get lFileNumber, , ChunkAry() '读出文件
Rs.Fields(sTXField).AppendChunk ChunkAry '调用AppendChunk函数写数据
End If
ReDim ChunkAry(CHUNKSIZE - 1) '为数据块开辟空间
For i = 1 To Chunks '循环读出所有数据块
Get lFileNumber, , ChunkAry() '读出一块数据
Rs.Fields(sTXField).AppendChunk ChunkAry '在数据库中增加数据块
Next
Rs.Update
Rs.Close
Close lFileNumber '关闭文件
lSaveFromFile = DataLen
Exit Function
ErrorHandle:
lSaveFromFile = 0
ShowMsg1 r_1("写图像数据出错!", _
"寫圖像數據出錯!") & vbCrLf & _
Err.Description, _
vbInformation, r_1("信息", "信息"), ""
If lFileNumber > 0 Then Close lFileNumber
End Function
2022年09月20日 01点09分
7
谢谢你的代码,谢谢!
2022年09月21日 11点09分
level 9
用二进制打开,二进制保存就可以啊。原始数据就是原始数据,你不用管它是什么。
你要是想处理图片,就必须搞清楚里面每个字节是什么。
2022年09月29日 09点09分
9