2016-09-16 74 views
-1

我做了一个工具,它获取BLOB列的内容,然后我将文件保存C#读取BLOB文件的内容并将其转变成文件时 - 这是不可读

哪些错误我几乎三天的问题我保存文件后 - 它是不可读的。当我尝试打开该文件的例外是: “无法读取文件头” 我不得不提的是大多数,如果文件是格式的.tif我 将不胜感激任何帮助

FbCommand cmd = new FbCommand(String.Format("SELECT FIRST 1 ID, DOCID, FILENAME, FILESIZE, DATA FROM ORIGINALS WHERE ID > {0} ORDER BY ID", initialIndex), con); 

var reader = cmd.ExecuteReader(); 
if (reader.HasRows) 
{ 
    while (reader.Read()) 
    { 
     //MessageBox.Show(reader.GetInt32(0).ToString()); 
     int docId = (int)reader["DOCID"]; 

     long newDocId = dictDocs[docId]; 
     initialIndex = (int)reader["ID"]; 
     string fileName = reader["FILENAME"].ToString(); 
     int size = (int)reader["FILESIZE"]; 
     byte[] data = (byte[])reader["DATA"]; 


     System.IO.FileStream fs = 
      new System.IO.FileStream("D:" + fileName, System.IO.FileMode.Create, System.IO.FileAccess.Write); 

     fs.Write(data, 0, data.Length); 
     fs.Close(); 

     var Writer = new BinaryWriter(File.OpenWrite("D:" + fileName)); 

     Writer.Write(data); 
     Writer.Flush(); 

    } 
} 
+1

你为什么要将数据两次写入同一个文件? –

+0

仅用于表明我已经试过两种方式 –

+2

您是否认为blob中的数据可能已失效? –

回答

2

毕竟

System.IO.FileStream fs = 
      new System.IO.FileStream("D:" + fileName, System.IO.FileMode.Create, System.IO.FileAccess.Write); 

     fs.Write(data, 0, data.Length); 
     fs.Close(); 

是不必要的。你正在覆盖你自己的文件。

+0

是的 - 我只是想表明我已经尝试了两种方式 –

+2

然后数据库中的数据已损坏。文件写入代码是正确的。事情要检查;你的数据库字段设置得足够大吗?它是否设置为VARBINARY而不是VARTEXT(即它是否是正确的数据类型)?您使用的SQL是否支持将BLOBS作为标准SQL进行检索(某些引擎需要用于检索Blob的特殊功能)?你能写一个测试读取TIF,将它写入数据库,从数据库中读取数据,并对两个字节数组进行数组比较? – PhillipH

+0

这就是我所做的 - 你是对的 - 看起来程序员在将文件保存在数据库中之前正在加密文件 –

相关问题