c#读取blob文件的内容,并在将其转换为文件时-it';它不可读

c#读取blob文件的内容,并在将其转换为文件时-it';它不可读,c#,firebird,C#,Firebird,我制作了一个工具,可以获取blob列的内容,然后保存文件 让我困扰了将近三天的问题是,在我保存文件后,它是不可读的。尝试打开文件时出现的例外情况是: “无法读取文件头” 我必须指出,如果文件是.tif格式的,则大多数 我将非常感谢任何帮助 FbCommand cmd = new FbCommand(String.Format("SELECT FIRST 1 ID, DOCID, FILENAME, FILESIZE, DATA FROM ORIGINALS WHERE ID > {0} O

我制作了一个工具,可以获取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();

    }
}
毕竟

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();

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

为什么要在同一个文件中写入两次数据?只是为了表明我已经尝试了两种方法。您是否认为blob中的数据可能已经无效?这就是问题所在。是的-我只是想表明我已经尝试了两种方法。您的数据库中的数据已损坏。文件写入代码是正确的。检查事项;数据库字段是否设置为足够大?它是否设置为VARBINARY而不是VARTEXT(即,它是正确的数据类型)?您使用的SQL是否适合作为标准SQL检索BLOB(某些引擎需要特殊函数来检索BLOB)?你能写一个测试来读取TIF,将其写入数据库,从数据库中读取,并将一个数组与两个字节的数组进行比较吗?这就是我所做的-你是对的-似乎程序员在将文件保存到数据库之前正在加密文件