2011-01-06 8 views
2

私はドキュメント/ファイルをデータベースのbyte []に​​格納することを使用しています。未知のファイルをオープンする方法[]

+0

これはC#のためのものであると仮定します(バイト[]の角かっこ)。 – James

+0

あなたはそのデータを自分で保存していますか?これが当てはまる場合は、データの構造を知っていて、それをバイナリから再構築することができます......しかし、あなたがunknowファイルを言ったように、どんなデータがあるのか​​分からない限り、 ..uは、メモ帳のようにバイトを文字に変換するよりも多くのことを行います... –

答えて

4

あなたが書いているファイルのファイル拡張子を知る必要があるので、OSは拡張子に基づいてデフォルトプログラムを実行できます。コードは次のようなものになります。

byte[] bytes = GetYourBytesFromDataBase(); 
    string extension = GetYourFileExtension(); //.doc for example 
    string path = Path.GetTempFileName() + extension; 
    try 
    { 
     using(BinaryWriter writer = new BinaryWriter(File.Open(path, FileMode.Create))) 
     { 
     writer.Write(yourBytes); 
     } 

     // open it with default application based in the 
     // file extension 
     Process p = System.Diagnostics.Process.Start(path); 
     p.Wait(); 
    } 
    finally 
    { 
     //clean the tmp file 
     File.Delete(path); 
    } 
+0

'File.WriteAllBytes'だけではないのはなぜですか?また、 'GetTempFileName'は任意の拡張子を持つので、これは動作しません。 –

+0

@Marc:そうです。一定。 –

1

ファイル拡張子もデータベースに保存する必要があります。ファイル拡張子がない場合は、ファイルを処理するために起動するプログラムをオペレーティングシステムに依存させることができないため、問題は非常に困難になります。データベースから

  • のデータのロードと、元のファイル拡張子を使用してファイルに保存します。

    は、次のパターンを使用することができます。

  • Start a new System.Diagnostics.Process保存されたファイルパスを指します。

ファイルを元のファイル拡張子で保存したので、OSはファイルを開くために拡張子用に登録されているプログラムを探します。

0

chibacityとDanielは、ファイル拡張子をdbに格納し、同意してファイル拡張子を格納するか、少なくともファイルの種類を示すインジケータを表示することをお勧めします。

の場合、これらのファイルは、開発中のファイル形式が変更になりやすいです。そして、あなたはまた、ファイル形式のバージョンは、データが保存されているかについての情報を保存することができますあなた自身の創造の形式のものであり、データの保存に使用したバージョンを覚えていないと、情報を回復するのに苦労します。

一般的にオブジェクトの永続性にも同じ問題があります。

関連する問題