我有一个数据库,其中包含一堆二进制列中保存的文件。我想用linq检索它们。
我有以下代码,当数据库中的文件是.tif文件时,它可以正常工作:
var Bytes = TblBriefingImages.Where(si => si.ImageName == t.FileName
&& si.ImageType == t.ImageType
&& "B" + si.SourceDocumentNumber == t.BriefingNumber)
.Select(si => si.Image.ToArray())
.SingleOrDefault();
File.WriteAllBytes(t.FullPath,Bytes);
当数据库中的文件是另一种格式(pdf,doc,jpg)时,它就会出现损坏。
将文件写入数据库的应用程序是VB6,并且正在运行:
' Copy the bitmap to the temporary file chunk by chunk:
Dim buffer() As Byte 'used to avoid UNICODE string
intHandle = FreeFile
Open strTempFileName For Binary Access Write As #intHandle
For i = 0 To lngBuffers
buffer() = !Image.GetChunk(BUFFER_SIZE)
Put #intHandle, , buffer()
Next i
Close #intHandle
评论:
'用于避免使用UNICODE字符串
让我相信它可能是一个编码问题,但我无法解决它可能正在使用的编码问题。
我也尝试过使用filestream而不是file.WriteAllBytes,并生成相同的文件:
var fs = File.Create(t.FullPath,Bytes.Length);
fs.Write(Bytes,0,Bytes.Length);
fs.Close();
答案 0 :(得分:0)
事实证明,VB6 UI层中有一些意外的代码正在将这些其他类型转换为zip文件。
我输入了一些代码来检测何时使用这些文件类型并重命名文件:
var newPath = Path.ChangeExtension(T.FullPath, ".Zip");
File.Move(T.FullPath, newPath);