2016-09-16 8 views
-1

だ私は、BLOB列の内容を取得するツールを作ったし、私は、ファイルC#は、BLOBファイルの内容を読み、ファイルに変換するとき - それは読めない

バグを私に問題がほぼ3日間の保存でありますファイルを保存した後では、それは判読できません。私は、ファイルを開こうとすると例外がある: 「ファイルのヘッダーを読み取ることができません」 私は、ファイルが.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

なぜ同じファイルにデータを2回書きますか? –

+0

両方の方法で試したことを示すだけです –

+2

ブロブのデータが無効であると考えましたか? –

答えて

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

その後、データベースのデータが壊れています。ファイル記述コードが正しい。チェックするもの;あなたのデータベースフィールドは十分に大きく設定されていますか? VARTEXTではないVARBINARYとして設定されていますか(つまり、正しいデータ型ですか)。使用しているSQLはBLOBを標準SQLとして取り出すことができますか(一部のエンジンではBLOBを取得するための特別な機能が必要です)。 TIFを読み、データベースに書き込んだり、データベースから読み込んだり、2バイト配列に対してArray Compareを実行するテストを書くことができますか? – PhillipH

+0

それは私が作ったものです - あなたは正しいと思います。プログラマがファイルをデータベースに保存する前に暗号化しているようです –

関連する問題